• MyBatis-Plus使用条件构造器Wrapper


    在这里插入图片描述
    Wrapper :条件构造抽象类,最顶端父类。AbstractWrapper类比较重要。

    AbstractWrapper类是 QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类。用于生成 sql 的 where 条件,,entity 属性也用于生成 sql 的 where 条件。

    注意:entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为

    AbstractWrapper抽象类提供的重要方法查看官方文档。

    官方文档–条件构造器 AbstractWrapper方法:https://baomidou.com/pages/10c804/#abstractwrapper

    注意:对于CRUD操作,我们都可以使用条件构造器Wrapper来操作。

    一、QueryWrapper/LambdaQueryWrapper

    1、select方法

    select方法:查询返回指定的部分字段数据。

    select(String... sqlSelect) 
    select(Predicate<TableFieldInfo> predicate) 
    select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) 
    
    • 1
    • 2
    • 3

    1.1 QueryWrapper

    		QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
    		queryWrapper
    				.select("id", "user_name", "height", "create_time");
    		List<UserDO> userDOList = userService.list(queryWrapper);
    
    • 1
    • 2
    • 3
    • 4

    1.2 LambdaQueryWrapper

    		QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
    		queryWrapper
    				.lambda()
    				.select(UserDO::getId, UserDO::getUserName, UserDO::getHeight, UserDO::getCreateTime);
    		List<UserDO> userDOList = userService.list(queryWrapper);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、eq方法

    eq(R column, Object val)
    eq(boolean condition, R column, Object val)
    
    • 1
    • 2

    注意:boolean condition 是控制该字段是否拼接到最终的sql语句中。如果为 true时,才会生成 sql 的 where 条件。

    2.1 QueryWrapper

    		QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
    		queryWrapper
    				.select("id", "user_name", "height", "create_time")
    				.eq("user_name", "赵子龙");
    		List<UserDO> userDOList = userService.list(queryWrapper);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2 LambdaQueryWrapper

    		QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
    		queryWrapper
    				.lambda()
    				.select(UserDO::getId, UserDO::getUserName, UserDO::getHeight, UserDO::getCreateTime)
    				.eq(false,UserDO::getUserName, "赵子龙"); //不会生成 sql 的 where 条件
    		List<UserDO> userDOList = userService.list(queryWrapper);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    通过上面的使用,对 QueryWrapper和 LambdaQueryWrapper的使用有些认知吧,后面更多使用,自行了解。

    3、分页查询

    	@Test
    	public void testPageWrapper() {
    		System.out.println(("----- 分页查询 method test ------"));
    
    		QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
    		queryWrapper
    				.lambda()
    				.select(UserDO::getId, UserDO::getUserName, UserDO::getHeight, UserDO::getCreateTime)
    				.eq(false,UserDO::getUserName, "赵子龙") //不会生成 sql 的 where 条件
    				.or()
    				.le(UserDO::getAge, 20);
    
    		Page<UserDO> page = new Page<>(2, 4);
    		Page<UserDO> userPage = userService.page(page, queryWrapper);
    
    		System.out.println("当前页:" + userPage.getCurrent());
    		System.out.println("总页数:" + userPage.getPages());
    		System.out.println("记录数:" + userPage.getTotal());
    		System.out.println("是否有上一页:" + userPage.hasPrevious());
    		System.out.println("是否有下一页:" + userPage.hasNext());
    		System.out.println("所有记录数据如下:");
    		userPage.getRecords().forEach(System.out::println);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    二、UpdateWrapper/LambdaUpdateWrapper

    1、set方法和setSql方法

    set(String column, Object val) 
    set(boolean condition, String column, Object val)
    setSql(String sql)
    
    • 1
    • 2
    • 3

    1.1 UpdateWrapper

    		UpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<UserDO>();
    		updateWrapper
    				.set("user_name","赵子龙updateWrapper")
    				.set("age","22")
    				.setSql("height = '1.80'")
    				.eq("id", "7");
    		boolean update = userService.update(updateWrapper);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.2 LambdaUpdateWrapper

    		UpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<UserDO>();
    		updateWrapper
    				.lambda()
    				.set(UserDO::getUserName, "赵子龙LambdaUpdateWrapper")
    				.set(UserDO::getAge, 21)
    				.setSql("height = '1.80'")
    				.eq(true,UserDO::getId, 7);
    		boolean update = userService.update(updateWrapper);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、使用 update(T entity, Wrapper updateWrapper)方法

        default boolean update(Wrapper<T> updateWrapper) {
            return this.update((Object)null, updateWrapper);
        }
    
        default boolean update(T entity, Wrapper<T> updateWrapper) {
            return SqlHelper.retBool(this.getBaseMapper().update(entity, updateWrapper));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用 T entity主要就是先在UpdateWrapper中设置查询条件,再通过实体类去设置要修改的值,也就是sql语句中的set内容,这种是比较符合mybatis plus的语句。

    注意:

    • 如果修改的值较少时,则推荐第一种方式。
    • 如果修改的值比较多时,推荐用第二种方式。

    这里以 LambdaUpdateWrapper为例。

    	@Test
    	public void testLambdaUpdateWrapper2() {
    		System.out.println(("----- LambdaUpdateWrapper修改(使用 entity)  method test ------"));
    
    		// 需要修改的字段
    		UserDO userDO = new UserDO();
    		userDO.setUserName("赵子龙LambdaUpdateWrapper");
    		userDO.setAge(20);
    		userDO.setHeight(1.88);
    		userDO.setEmail("zhaoyun@123.com");
    		userDO.setUpdateTime(new Date());
    
    		UpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<UserDO>();
    		updateWrapper
    				.lambda()
    				.eq(UserDO::getUserName, "赵子龙")
    				.or()
    				.eq(true,UserDO::getId, 7);
    		boolean update = userService.update(userDO, updateWrapper);
    
    		System.out.println("update = " + update);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    通过上面的使用,对 UpdateWrapper和 LambdaUpdateWrapper,以及 update方法的使用有些认知吧,后面更多使用,自行了解。

    – 求知若饥,虚心若愚。

  • 相关阅读:
    挂钩函数——让接口接收函数而不是类的实例
    java+selenium web自动化测试入门
    高通cDSP简单编程例子(实现查询高通cDSP使用率、签名),RK3588 npu使用率查询
    Go for A Tour of Go 20230924 Day4
    mysql的锁介绍
    苹果手机自身的ip地址怎么查
    软考 系统架构设计师系列知识点之数字孪生体(4)
    PIP安装本地离线包whl
    什么是50ETF期权开户条件,怎么开期权交易权限?
    拼搏半个月,刷了 571道Java高频面试题喜提阿里 offer
  • 原文地址:https://blog.csdn.net/qq_42402854/article/details/126203560