QueryWrapper的基础方法
- 上图绿色框为抽象类abstract
- 蓝色框为正常class类,可new对象
- 黄色箭头指向为父子类关系,箭头指向为父类
wapper介绍 :
Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法西面贴源码展示
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
**LambdaQueryWrapper :**看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
QueryWrapper的使用
QueryWrapper处理日期判断大小问题
第一种:
注意:时间比较时,必须传入 JDK 的 Date 类型,不支持字符串。
<if test="pageDtos.startTime !=null">
and a.create_time >= #{pageDtos.startTime}
</if>
<if test="pageDtos.overTime !=null">
and a.create_time <= #{pageDtos.overTime}
</if>
if(Objects.nonNull(dto.getPushDataStart()) && Objects.nonNull(dto.getPushDataEnd())){
queryWrapper.between(EduTollOrderEntity.PushData, dto.getPushDataStart(), dto.getPushDataEnd());
} else if(Objects.nonNull(dto.getPushDataStart())){
queryWrapper.ge(EduTollOrderEntity.PushData, dto.getPushDataStart());
} else if(Objects.nonNull(dto.getPushDataEnd())){
queryWrapper.le(EduTollOrderEntity.PushData, dto.getPushDataEnd());
}
第二种:
QueryWrapper qw = new QueryWrapper();
qw.apply(“DATE(createtime) >= STR_TO_DATE(’”+rqq+" 00:00:00’,’%Y-%m-%d %H:%i:%s’)");
qw.apply(“DATE(createtime) <= STR_TO_DATE(’”+rqz+" 23:59:59’,’%Y-%m-%d %H:%i:%s’)");
Page page = new Page<>(pageIndex, pageSize);
IPage iPage = iXtRzService.page(page,qw);
List list =iPage.getRecords();
注意:DATE_FORMAT(date,format)函数则是把数据库的日期转换为对应的字符串格式
SELECT STR_TO_DATE('2017-01-06 10:20:30','%Y-%m-%d %H:%i:%s') AS result;
QueryWrapper查询的高级用法
查询指定字段
通过select()查询指定字段,同时可对字段进行Mysql函数处理
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.select("service_code as serviceCode", "sum(num) as num");
设置limit
通过last(),效果等同于limit
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.last("limit 0,5");
查询中使用函数
例如,在查询IP时,想使用INET_ATON()函数,可以使用apply()实现
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.apply("INET_ATON(qsip) <= INET_ATON({0})", ipQuery);
queryWrapper.apply("INET_ATON(zzip) >= INET_ATON({0})", ipQuery);
注意:INET_ATON()是一个计算机函数,将一个字符串IP地址转换为一个32位的网络序列IP地址。
select * from ip_table where inet_aton(ip) > inet_aton('192.168.1.3') and inet_aton(ip) < inet_aton('192.168.1.20');
分页插件
MyBatisPlus也内置了分页插件可以直接使用
如何使用:
首先需要在MyBatisPlus的配置类里面配置一个分页插件,如下图:
其次就是测试如下图:
模糊匹配问题
模糊匹配多个字段
SELECT * FROM Student WHERE del_status='0' AND (name LIKE '%张%' OR address LIKE '%张%');
使用Mybatis-Plus表达如下,这样的话就可以拼接多个模糊匹配的字段,防止出错
userWrapper.and(
wrapper ->
wrapper.like("name", keywords).or().like("address", keywords)
);