0. 引入
我们在这里使用StudentInfo
实体类来进行举例:
@Data @Builder @NoArgsConstructor @AllArgsConstructor public class StudentInfo { @Id private Long id; /** * 姓名 */ private String name; /** * 手机号 */ private String mobile; /** * 学号 */ private String studentId; /** * 班级编号 */ private String classId; /** * 创建时间 */ private Date ctime; /** * 更新时间 */ private Date mtime; /** * 删除标志 0:未删除 1:删除 */ private Integer deleted_status; }
1. andEqualTo
使用andEqualTo
语句,相当于使用where 字段名 = 某值
的SQL
语句
如果我们想查询班级编号为12345678
的学生,可以这样写:
Weekend<StudentInfo> weekend = Weekend.of(StudentInfo.class); WeekendCriteria<StudentInfo, Object> weekendCriteria = weekend.weekendCriteria(); weekendCriteria.andEqualTo(StudentInfo::getClassId, "12345678"); weekendCriteria.andEqualTo(StudentInfo::getdeletedStatus, 0); List<StudentInfo> infoList = studentInfoMapper.selectByExample(weekend);
因为预期能够查询到多名学生信息,因此应该使用selectByExample
,并使用List
来接收返回信息;
2. andIn
使用andIn
语句,相当于使用where 字段名 in 某值区间
的SQL
语句
如果我们想在学生班级编号为12345678
的基础上,查询出学号为0001
、0002
和0003
的同学,那么可以这样写:
Weekend<StudentInfo> weekend = Weekend.of(StudentInfo.class); WeekendCriteria<StudentInfo, Object> weekendCriteria = weekend.weekendCriteria(); weekendCriteria.andEqualTo(StudentInfo::getClassId, "12345678"); List<String> studentIdList = Arrays.asList("0001", "0002", "0003"); weekendCriteria.andIn(StudentInfo::getStudentId, studentIdList); weekendCriteria.andEqualTo(StudentInfo::getdeletedStatus, 0); List<StudentInfo> infoList = studentInfoMapper.selectByExample(weekend);
3. andNotEqualTo
刚好与andEqualTo
相反;
4. andNotIn
刚好与andIn
相反;
5. andGreaterThanOrEqualTo
顾名思义,这个是大于等于,也可以用来按照数据的修改日期进行过滤,写法如下:
weekendCriteria.andGreaterThanOrEqualTo(StudentInfo::getMtime, DateUtils.transferString2Date(LocalDate.now().toString()));
6. andLike
可以使用andLike
进行模糊查询,但是要注意,模糊查询会进行全表扫描,速度缓慢,极易造成慢查询(关于慢查询,可以参考我的另一篇文章:什么是慢查询?如何优化?);
如果我们想查找所有的名字中带有红
的同学信息,可以这样写:
Weekend<StudentInfo> weekend = Weekend.of(StudentInfo.class); WeekendCriteria<StudentInfo, Object> weekendCriteria = weekend.weekendCriteria(); weekendCriteria.andLike(StudentInfo::getName, "%" + "红" + "%"); weekendCriteria.andEqualTo(StudentInfo::getdeletedStatus, 0); List<StudentInfo> infoList = studentInfoMapper.selectByExample(weekend);
如果数据库中要进行大量的模糊搜索、文本匹配,可以考虑使ElasticSearch
,ElasticSearch
是一个分布式、高性能、高可用、可伸缩、RESTful 风格的搜索和数据分析引擎。
7. 总结
在查询条件比较多的时候,我们可以灵活地将各个条件拼在一起,tkMapper
让我们在最大程度上避免了手写SQL
语句,极大地提升了我们的开发效率。