MybatisPlus实现条件查询
wapper介绍
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
@RunWith(SpringRunner.class)
@SpringBootTest
public class QueryWrapperTests {@Autowiredprivate UserMapper userMapper;}
AbstractWrapper
注意:以下条件构造器的方法入参中的
column
均表示数据库字段
ge、gt、le、lt、isNull、isNotNull
@Test
public void testDelete() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("name").ge("age", 12).isNotNull("email");int result = userMapper.delete(queryWrapper);System.out.println("delete return count = " + result);}
SQL:UPDATE user SET deleted=1 WHERE deleted=0 AND name IS NULL AND age >= ? AND email IS NOT NULL
eq、ne
注意:seletOne返回的是一条实体记录,当出现多条时会报错
@Test
public void testSelectOne() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "Tom");User user = userMapper.selectOne(queryWrapper);System.out.println(user);}
SELECT id,name,age,email,create_time,update_time,deleted,version FROM user WHERE deleted=0 AND name = ?
between、notBetween
包含大小边界
@Test
public void testSelectCount() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.between("age", 20, 30);Integer count = userMapper.selectCount(queryWrapper);System.out.println(count);}
SELECT COUNT(1) FROM user WHERE deleted=0 AND age BETWEEN ? AND ?
allEq
@Test
public void testSelectList() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();Map<String, Object> map = new HashMap<>();map.put("id", 2);map.put("name", "Jack");map.put("age", 20);queryWrapper.allEq(map);List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}
SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 AND name = ? AND id = ? AND age = ?
like、notLike、likeLeft、likeRight
selectMaps返回Map集合列表
@Test
public void testSelectMaps() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.notLike("name", "e").likeRight("email", "t");List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表maps.forEach(System.out::println);}
SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 AND name NOT LIKE ? AND email LIKE ?
in、notIn、inSql、notinSql、exists、notExists
in、notIn:
notIn("age",{1,2,3})
--->age not in (1,2,3)
notIn("age", 1, 2, 3)
--->age not in (1,2,3)
inSql、notinSql:可以实现子查询
- 例:
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)
@Test
public void testSelectObjs() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();//queryWrapper.in("id", 1, 2, 3);queryWrapper.inSql("id", "select id from user where id < 3");List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表objects.forEach(System.out::println);}
SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 AND id IN (select id from user where id < 3)
or、and
注意:这里使用的是 UpdateWrapper
不调用or
则默认为使用 and
连
@Test
public void testUpdate1() {//修改值User user = new User();user.setAge(99);user.setName("Andy");//修改条件UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.like("name", "h").or().between("age", 20, 30);int result = userMapper.update(user, userUpdateWrapper);System.out.println(result);}
UPDATE user SET name=?, age=?, update_time=? WHERE deleted=0 AND name LIKE ? OR age BETWEEN ? AND ?
嵌套or、嵌套and
这里使用了lambda表达式,or中的表达式最后翻译成sql时会被加上圆括号
@Test
public void testUpdate2() {//修改值User user = new User();user.setAge(99);user.setName("Andy");//修改条件UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.like("name", "h").or(i -> i.eq("name", "李白").ne("age", 20));int result = userMapper.update(user, userUpdateWrapper);System.out.println(result);
}
UPDATE user SET name=?, age=?, update_time=?
WHERE deleted=0 AND name LIKE ?
OR ( name = ? AND age <> ? )
orderBy、orderByDesc、orderByAsc
@Test
public void testSelectListOrderBy() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("id");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}
SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 ORDER BY id DE
last
直接拼接到 sql 的最后
注意:只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用
@Test
public void testSelectListLast() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.last("limit 1");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}
SELECT id,name,age,email,create_time,update_time,deleted,version
FROM user WHERE deleted=0 limit 1
指定要查询的列
@Test
public void testSelectListColumn() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("id", "name", "age");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}
SELECT id,name,age FROM user WHERE deleted=0
set、setSql
最终的sql会合并 user.setAge(),以及 userUpdateWrapper.set() 和 setSql() 中 的字段
@Test
public void testUpdateSet() {//修改值User user = new User();user.setAge(99);//修改条件UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.like("name", "h").set("name", "老李头")//除了可以查询还可以使用set设置修改的字段.setSql(" email = '123@qq.com'");//可以有子查询int result = userMapper.update(user, userUpdateWrapper);}
UPDATE user SET age=?, update_time=?, name=?, email = '123@qq.com' WHERE deleted=0 AND name LIKE ?
MybatisPlus实现条件查询相关推荐
- MyBatis-Plus的条件查询(只举例部分方便使用)
DQL编程控制 查询条件 查询范围(>.=.between) 模糊查询(like) 空判定(null) 包含性匹配(in) 分组(group) 排序(order) -- 等匹配=: Lambda ...
- springboot封装统一查询对象进行多条件查询案例(mybatis和mybatis-plus+反射两种版本)
文章目录 mybatis版本: 通用查询接口 封装辅助查询类: 通用controller: 自定义注解 controller service mapper测试 mybatis-plus实现版本 ent ...
- mybatisplus的详细使用(自动填充,乐观锁,分页,条件查询)
1.自动填充 @Data @EqualsAndHashCode(callSuper = false) @TableName("t_user") public class User ...
- Mybatis-Plus查询之条件查询(用户名查询)(批量查询)
Mybatis-Plus查询之条件查询(用户名查询)(批量查询) 上代码 上代码 //查询多个用户//Arrays.asList 工具类List<User> users = iUserRe ...
- MyBatis-Plus Wrapper条件构造器查询大全
一.引言 那么那么那么今天来说下MP中强大的条件查询功能. 本章是基于上个案例来讲的:MyBaits-Plus 快速入门案例 二.具体操作 首先来说说基本的查询吧,根据主键或者简单的查询条件进行查询. ...
- Mybatis-plus条件查询构造器
Mybatis-plus条件查询构造器 一.wapper介绍 二.AbstractWrapper 1.ge.gt.le.lt.isNull.isNotNull 2.eq.ne 3.between.no ...
- mybatis-plus在Mapper类中使用@select标签进行多表联合动态条件查询
1.单表动态条件查询 1)单字段作为参数 直接用@param设置的值作为注入就好了 @Select("select * from ppms_person_message where crea ...
- Mybatis-plus :分页带条件查询
StudentController @ApiOperation("分页带条件查询学生信息")@GetMapping("/getStudentByOpr/{pageNo}/ ...
- Shardingsphere的分库分表+读写分离+分页条件查询
Shardingsphere的分库分表与读写分离 导入依赖 <dependencies><dependency><groupId>org.springframewo ...
最新文章
- Study on Android【三】--Intent消息传递
- margin的塌陷现象
- Stanford机器学习笔记-6. 学习模型的评估和选择
- 登录日志怎么实现_【创新攻关】安全室构建异常登录行为检测审计模型
- 大学python笔记_Python 上手笔记
- html5+、ReactNative、Weex、Ionic之间的区别、(配置java、python、Android环境)、ReactNative(react-native-cli)、yarn、Weex
- 关于redis性能问题分析和优化
- Java8初体验(二)Stream语法详解
- win10硬盘锁怎么解除_Win10磁盘被写保护怎么解除?
- 【Java】位运算符---算术右移和逻辑右移、算术左移和逻辑左移
- 2020年育婴员(五级)报名考试及育婴员(五级)模拟考试题
- Android 仿美拍,秒拍 ,视频封面选择.有图有真相.
- 使用token验证登录信息,把token存到数据库中
- 汽车厂商 API数据接口
- uniapp,h5微信如何分享页面,完整设置分享链接图片简介
- Docker报错:copy file range failed: no space left on device
- Greenshot 学习笔记(2) Greenshot.Drawing.Gripper类
- 关于photoswipe的data-size问题-自适应宽高
- Visual Studio Code 插件推荐安装
- 《我是一只IT小小鸟》连载三