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)
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实现条件查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MybatisPlus性能分析插件
- 下一篇: 统一返回的json时间格式