Map和模糊查询扩展

HeJin大约 2 分钟数据库技术Mybatis

1、万能Map

实体类或者数据库中的表字段或者参数过多,考虑使用Map。

UserMapper.java接口中新增一个方法

/**
 * 使用map传入参数查询用户
 * @param map
 * @return
 */
User getUserById2(Map<String,Object> map);

/**
 * 使用map参数插入用户
 * @param map 传入Map类型
 * @return
 */
int addUser2(Map<String, Object> map);

UserMapper.xml文件中新增

<!--传入map类型参数查询用户-->
<select id="getUserById2" resultType="com.kuang.pojo.User" parameterType="map">
    select * from user where id = #{userid} and name = #{username}
</select>

<!--使用Map传递参数插入用户。对象的属性可以提取出来。传递map的key-->
<insert id="addUser2" parameterType="map">
    insert into user (id,name,pwd) values (#{userid},#{username},#{userpassword})
</insert>

测试

/**
 * 使用map传参查询用户
 */
@Test
public void test0201(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    Map map = new HashMap<String, Object>();
    map.put("userid",1);
    map.put("username","狂神");

    User user = userMapper.getUserById2(map);

    sqlSession.commit();

    System.out.println(user);

    sqlSession.close();
}

/**
 * 使用map传参插入用户
 */
@Test
public void test0301(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    HashMap<String, Object> map = new HashMap<String, Object>();
    /**
         * 此处map的键位mapper文件中设置的字段
         */
    map.put("userid",666);
    map.put("username","map传值");
    map.put("userpassword","mmmmmm");

    userMapper.addUser2(map);
    // 提交事务
    sqlSession.commit();

    sqlSession.close();
}

2、参数的三种传递方式

Map

Map传递参数,直接在sql中取出key即可。

parameterType="map"

对象

对象传递参数,直接在sql中取对象的属性即可。

parameterType="具体的对象object"

基本类型

只有一个基本类型参数的情况下,可以直接在sql中取到。

parameterType="int"  // 可不写

3、传递多个参数

使用Map或者注解

4、模糊查询

Java代码执行时传递通配符

<!--模糊查询-->
<select id="getUserListByLike" resultType="com.kuang.pojo.User">
    select * from user where name like #{value}
</select>

测试

/**
     * 模糊查询
     */
@Test
public void test0202(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    List<User> users = userMapper.getUserListByLike("%李%");
    for (User user : users) {
        System.out.println(user);
    }

    sqlSession.close();
}

结果

User{id=3, name='李四', pwd='666666'}
User{id=5, name='李五', pwd='5555555'}

Process finished with exit code 0

在sql中拼接使用通配符

<!--模糊查询-->
<select id="getUserListByLike" resultType="com.kuang.pojo.User">
    select * from user where name like "%" #{value} "%"
</select>

测试

@Test
public void test0202(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    List<User> users = userMapper.getUserListByLike("李");
    for (User user : users) {
        System.out.println(user);
    }

    sqlSession.close();
}

结果

User{id=3, name='李四', pwd='666666'}
User{id=5, name='李五', pwd='5555555'}

Process finished with exit code 0

注意SQL注入

模糊查询时,需要避免SQL注入。