tkMapper之使用Weekend拼接条件进行条件查询
tkMapper之使用Weekend拼接查询条件进行查询数据库表
·
tkMapper之使用Weekend拼接条件进行条件查询
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()));
其中,DateUtils.transferString2Date
方法可以参考我的另一篇文章:将String转为date,方便快捷;
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
语句,极大地提升了我们的开发效率。
更多推荐
已为社区贡献5条内容
所有评论(0)