Map和模糊查询
引入的原因
-
在之前的CRUD操作中,INSERT与UPDATE都是传入了POJO类 , 这意味着当一个POJO类十分复杂的时候,我们在执行操作的时候每次都需要新建这个类的实例,十分不方便,
例如 当UPDATE的时候, 假设我们只需要根据id修改name , 如果传入的是User ,就需要**新建一个User实例,为其附上参数对应的值,然后传入 **,但实际上 password属性是不需要的
-
除此之外,传入POJO类也为**#{}带来了限制 **: #{} 只能是 POJO类的属性名 , 使用Map可以使得更加灵活
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int flag = userMapper.addUser(new User(4,"name4","4567")); //实际上 password 是完全不需要的
sqlSession.commit(); //增删改必须提交事物 sqlSession.commit();
sqlSession.close();
return flag ;
如果使用Map<> , 就可以仅仅传入id 与 name 等SQL语句需要的参数 ,从而简化操作
具体使用
如果 字段或者参数过多,应该使用Map
//使用Map进行用户insert
public int addUser2(Map<String,Object> map);
<!--通过Map添加用户-->
<insert id="addUser2" parameterType="Map"><!--传入类型是Map , 会发现#{}可以是随意的命名,#{}是Map的键值,对应其value-->
insert into mybatis.user (id,name,password) values (#{userId},#{userName},#{userPassword})
</insert>
Map<String,Object> map = new HashMap<String,Object>(){
{
put("userId",5);
put("userName","嘿嘿");
put("userPassword","123213");
}
};
insertUser2(map);
模糊查询
-
在Java中 加入模糊查询通配符%
List<User> userList = mapper.getUserList("%张%");
-
在SQL中拼接使用通配符%
select * from user where name like '%'#{name}'%' <!--直接 '%'#{}'%拼接'-->