tkmybatis多条件、模糊查询
Example e1 = new Example(Student.class);
Example.Criteria criteria = e1.createCriteria();
// 1. 学号不为空则添加查询条件
if (StringUtils.isNotBlank(student.getPsnCode)){
criteria.andEqualTo("psnCode",student.getPsnCode);
}
// 2. 姓名不为空则模糊查询
if (StringUtils.isBlank(student.getPsnName)){
criteria.andLike("psnName","%" + student.getPsnName() + "%");
}
//3.查询
List<Student> students = studentMapper.selectByExample(e1);
几个注意事项
- 不能缺少以上1、2判断为空步骤
若直接写成
当学号、姓名为空,想要查询所有数据时example.createCriteria() .andEqualTo("psnCode",student.getPsnCode); .andLike("psnName","%" + student.getPsnName() + "%");
- 其中如果学号为null,则不添加学号的筛查,没问题。但如果学号为""(空串),则会添加学号的筛查;
- 姓名的模糊查询,即使姓名为null,或者是姓名为""(空串),还是会做过滤,得到的sql如下
这和我们想要的查询所有数据的sql明显不一致SELECT * from student where psn_code = '' and psn_name like '%%' #或者 SELECT * from student where psn_code = '' and psn_name like '%null%'
SELECT * from student
studentMapper.selectByExample(e1)
的使用
需要注意,不要不小心写成studentMapper.selectByExample(criteria)
,这种写法编译不会报错;