QueryWrapper、UpdateWrapper和LambdaWrapper
PS:所有⽰例中的userService接⼝为 IUserService继承了MP中的 IService
1. QueryWrapper
说明:
继承⾃ AbstractWrapper ,⾃⾝的内部属性 entity 也⽤于⽣成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() ⽅法获取
1.1 select函数
sqlSelect)
select(Predicate<TableFieldInfo> predicate)
select(Class<T> entityClass, Predicate<TableFieldInfo> predicate)
设置查询字段
说明:
以上⽅分法为两类.
第⼆类⽅法为:过滤查询字段(主键除外),⼊参不包含 class 的调⽤前需要wrapper内的entity属性有值! 这两类⽅法重复调⽤以最后⼀次为准实战
/**
* 设置所要查询的字段
*/
@Test
public void test01(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("name","age");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
上述代码对应执⾏的sql语句
SELECT name,age FROM tb_user WHERE is_deleted=0
-------查询结果:user对象只封装了name和age属性-------------
User(id=null, name=222222, age=12, email=null, version=null, isDeleted=null, mgtCreated=null, mgtModified=null)
User(id=null, name=eqw, age=32, email=null, version=null, isDeleted=null, mgtCreated=null, mgtModified=null)
......
第⼆种⽅法的使⽤(可以排除或指定查询字段)
QueryWrapper<Admin> wrapper = new QueryWrapper<>();
// 下列构造⽅式指定排除password字段
wrapper.select(Admin.class,i -> !i.getColumn().equals("password"));
2. UpdateWrapper
说明:
继承⾃ AbstractWrapper ,⾃⾝的内部属性 entity 也⽤于⽣成 where 条件
及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() ⽅法获取!
2.1 set函数
set(String column, Object val)
set(boolean condition, String column, Object val)
SQL SET 字段的属性值
例: set("name", "⽼李头")
例: set("name", "")--->数据库字段值变为空字符串
例: set("name", null)--->数据库字段值变为null
实战
/**
* 插⼊或更新
*/
@Test
public void test03(){
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("age",Arrays.asList(20,30,40));
updateWrapper.set("name","jack");
updateWrapper.set("age",43);
updateWrapper.set("email","p");
userService.update(updateWrapper);
}
执⾏的SQL
age = 20/30/40 的 user 其姓名,age ,email设置为:jack ,43,p
UPDATE tb_user SET name='jack',age=43,email='p' WHERE is_deleted=0 AND (age IN (20,30,40))
2.2 setSql函数
setSql(String sql)
设置 SET 部分 SQL
例: setSql("name = '⽼李头'")
实战
/**
* 根据 UpdateWrapper 条件,更新记录需要设置 sqlset
*/
@Test
public void test06(){
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
// 设置 set sql语句部分
updateWrapper.setSql("age = 18");
updateWrapper.eq("name","jason");
userService.update(updateWrapper);
}
执⾏的sql
UPDATE tb_user SET age = 18 WHERE is_deleted=0 AND (name = 'jason')
3. LambdaWrapper
获取 LambdaWrapper
在QueryWrapper中是获取LambdaQueryWrapper
在UpdateWrapper中是获取LambdaUpdateWrapper
3.1 LambdaQueryWrapper
/**
* lambda链式编程
*/
@Test
public void test88(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.between(User::getAge,30,60)
.orderByDesc(User::getId);
List<User> list = userService.list(queryWrapper);
list.forEach(System.out::println);
}
执⾏的SQL语句
SELECT id,name,age,email,version,is_deleted,mgt_created,mgt_modified FROM tb_user WHERE is_deleted=0 AND (age BETWEEN 30 AND 60) ORDER BY id DESC 3.2 LambdaUpdateWrapper
/**
* 测试链式编程更新操作
*/
@Test
public void test99(){
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda()
.le(User::getAge, 30)
.setSql("email = 'p'");
userService.update(updateWrapper);
}
执⾏的SQL语句
UPDATE tb_user SET email = 'p' WHERE is_deleted=0 AND (age <= 30)
4. 使⽤ Wrapper ⾃定义SQL
需求来源:
在使⽤了mybatis-plus之后, ⾃定义SQL的同时也想使⽤Wrapper的便利应该怎么办?在mybatis-plus版本3.0.7得到了完美解决版本需要⼤于或等于3.0.7, 以下两种⽅案取其⼀即可
Service.java
⽅案⼀注解⽅式 Mapper.java
@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);
⽅案⼆ XML形式 l
<select id="getAll" resultType="MysqlData">
SELECT * FROM mysql_data ${ew.customSqlSegment}lambda编程
</select>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论