欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于mybatis-plus的多条件查询语句关联

程序员文章站 2022-03-11 18:45:23
...

AbstractWrapper:
说明:
QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类
用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件
注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为

1.allEq -> 全部eq(或个别isNull)
例1: allEq({id:1,name:“老王”,age:null})—>id = 1 and name = ‘老王’ and age is null
例2: allEq({id:1,name:“老王”,age:null}, false)—>id = 1 and name = ‘老王’

2.eq -> 等于
等于 =
例: eq(“name”, “老王”)—>name = ‘老王’

3.gt-> 大于
大于 >
例: gt(“age”, 18)—>age > 18

4.ge - > 大于等于
大于等于 >=
例: ge(“age”, 18)—>age >= 18

5.lt
小于 <
例: lt(“age”, 18)—>age < 18

6.le
小于等于 <=
例: le(“age”, 18)—>age <= 18

7.between
BETWEEN 值1 AND 值2
例: between(“age”, 18, 30)—>age between 18 and 30

8.notBetween
NOT BETWEEN 值1 AND 值2
例: notBetween(“age”, 18, 30)—>age not between 18 and 30

9.like
LIKE ‘%值%’
例: like(“name”, “王”)—>name like ‘%王%’

10.in
字段 IN (value.get(0), value.get(1), …)
例: in(“age”,{1,2,3})—>age in (1,2,3)

11.insql
字段 IN ( sql语句 )
例: inSql(“age”, “1,2,3,4,5,6”)—>age in (1,2,3,4,5,6)
例: inSql(“id”, “select id from table where id < 3”)—>id in (select id from table where id < 3)

12.groupBy
分组:GROUP BY 字段, …
例: groupBy(“id”, “name”)—>group by id,name

13.orderByDesc
排序:ORDER BY 字段, … ASC
例: orderByAsc(“id”, “name”)—>order by id ASC,name ASC

14.and
AND 嵌套
例: and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))—>and (name = ‘李白’ and status <> ‘活着’)

QueryWrapper
说明:
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取
#select 设置查询字段
例: select(“id”, “name”, “age”)
例: select(i -> i.getProperty().startsWith(“test”))

UpdateWrapper
说明:
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取!
#set
SQL SET 字段
例: set(“name”, “老李头”)
例: set(“name”, “”)—>数据库字段值变为空字符串
例: set(“name”, null)—>数据库字段值变为null

lambda
获取 LambdaWrapper
在QueryWrapper中是获取LambdaQueryWrapper
在UpdateWrapper中是获取LambdaUpdateWrapper
#使用 Wrapper 自定义SQL
需求来源:
在使用了mybatis-plus之后, 自定义SQL的同时也想使用Wrapper的便利应该怎么办? 在mybatis-plus版本3.0.7得到了完美解决 版本需要大于或等于3.0.7, 以下两种方案取其一即可

Service.java
mysqlMapper.getAll(Wrappers.<MysqlData>lambdaQuery().eq(MysqlData::getGroup, 1));
方案一 注解方式 Mapper.java
@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);
方案二 XML形式 Mapper.xml
<select id="getAll" resultType="MysqlData">
	SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>