Mybatis的Map传参和模糊查询(项目点)

发布于 2021-03-23  511 次阅读


一、Mybatis的传参方式

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

示例:

//参数为map的通过ID来查找用户
User getUserById2(Map<String,Object> map);

//UserMapper.xml文件
<select id="getUserById2" parameterType="map" resultType="PoJo.User">
    select * from mysql.mybatisuser where id = #{id};
</select>

//UserMapperTest
@Test
public void getUserById2(){
    //获取执行sql的对象
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    //获得接口并返回;
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    //使用Mqp来传参
    HashMap<String,Object> map = new HashMap<String, Object>();
    map.put("id",5);
    //通过Id获取对象
    User user = mapper.getUserById2(map);
    System.out.println(user.getName());
    //关闭对象
    sqlSession.close();
}

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

  • <parameterType="PoJo.User">

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

  • <select id="getUserList" resultType="PoJo.User" 不写>

多个参数用Map,或者注解!

 

二、模糊查询 like

1.java代码执行的时候,传递通配符% %

(推荐,避免用户写错)

List<User> userList = mapper.getUserLike("%张%");
select * from mysql.mybatisuser where name like #{value};

示例:

//模糊查询
List<User> getUserLike(String value);

//UserMapper.xml文件
<select id="getUserLike" parameterType="map" resultType="PoJo.User">
    select * from mysql.mybatisuser where name like #{value};
</select>

//UserMapperTest
@Test
public void getUserlike() {
    //获取执行sql的对象
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    //获得接口并返回;
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    //通过Id获取对象
    List<User> userList= mapper.getUserLike("%张%");
    for (User user : userList) {
        System.out.println(user.getName());
    }
    //关闭对象
    sqlSession.close();
}

 

2.在sql拼接中使用通配符(有风险)

List<User> userList = mapper.getUserLike("张");
select * from mysql.mybatisuser where name like "%"#{value}"%"此时字符穿拼接可能出错;

 

三、项目实践

1.Map传参

比如修改密码
User只修改密码,如果User对象不能为空,则需要全部赋值,但是如果用parameterType="map",则只需要传id 和password即可;
通过对象则需要把对象的全部属性都写出来,但通过map只需要写需要的
因此在实体类或者数据库中的表,字段或参数过多,我们应当考虑使用Map!(可以用Map来封装对象)

2.模糊查询

在sql拼接中使用通配符
List<User> userList = mapper.getUserLike("张");
select * from mysql.mybatisuser where name like "%"#{value}"%";所以应该写死让用户传递稳定的值value,可以避免用户查询到异常值;

 


她喜欢所以就做咯