MybatisPlus------条件构造器Wrapper以及QueryWrapper用法(七)

MybatisPlus------条件构造器Wapper(七)

在这里插入图片描述
Wrapper:条件构造器抽象类,最顶端父类
AbstarctWrapper:用于查询条件封装,生成sql的where条件。
QueryWrapper:查询条件封装(可以用于查询、删除,更新)
UpdateWrapper:Update条件封装
AbstractLambdaWrapper:使用Lambda语法
LambdaUpdateWrapper:用于Lambda语法使用的查询Wrapper
LambdaQueryWrapper:用于Lambda语法使用的更新Wrapper

使用QueryWrapper进行更新

        @Test
    public void testUpdate(){
        // 将(年龄大于20,并且用户名中包含有a)或邮箱为null的信息修改
        //where条件
        QueryWrapper<BaseProcedure> baseProcedureQueryWrapper = new QueryWrapper<>();
        baseProcedureQueryWrapper.gt("age",20)
                .like("procedure_name","a")
                .or()
                .isNull("eamil");
        //更新值
        BaseProcedure baseProcedure = new BaseProcedure();
        baseProcedure.setProcedureName("asdasd");
        int update = baseProcedureMapper.update(baseProcedure, baseProcedureQueryWrapper);
        System.out.println("update"+update);
    }

涉及到条件优先级怎么处理?

涉及到where子句后判断的优先级时(lambda中的条件优先执行),
例如:
将用户名中包含有a并且(年龄大于20或邮箱为null)的信息修改

@Test
    public void testUpdate2(){
        // 将用户名中包含有a并且(年龄大于20或邮箱为null)的信息修改
        //where条件
        //涉及到lambda表达式,lambda中的条件优先执行
        QueryWrapper<BaseProcedure> baseProcedureQueryWrapper = new QueryWrapper<>();
        baseProcedureQueryWrapper.like("procedure_name","a")
                .and(i ->{
                     i.gt("age",20)
                            .or()
                            .isNull("eamil");
                });
        //更新值
        BaseProcedure baseProcedure = new BaseProcedure();
        baseProcedure.setProcedureName("asdasd");
        int update = baseProcedureMapper.update(baseProcedure, baseProcedureQueryWrapper);
        System.out.println("update"+update);
    }

and()和or()中的Consumer怎么理解?

and()方法源码:

/**
 * 查询条件封装
 * <p>嵌套</p>
 * <li>泛型 Param 是具体需要运行函数的类(也是 wrapper 的子类)</li>
 *
 * @author hubin miemie HCL
 * @since 2017-05-26
 */
public interface Nested<Param, Children> extends Serializable {

    /**
     * ignore
     */
    default Children and(Consumer<Param> consumer) {
        return and(true, consumer);
    }

Param是泛型,是具体需要运行函数的类,也就是 wrapper 的子类,就是条件构造器,因此可以将条件构造器写入and方法中。
而Consumer,是Lambda表达式中的消费者接口,消费者接口中一定是由参数的,方法中的内容就是我们对参数的操作方式,

仅需要查询部分字段如何写?

通过调用QueryWrapper的select()方法,在该方法里传入需要查询的字段即可。

    @Test
    public void testSelect(){
        //查询用户用户名,和用户编码
        QueryWrapper<BaseProcedure> baseProcedureQueryWrapper = new QueryWrapper<>();
        baseProcedureQueryWrapper.select("procedure_code","procedure_name");
        List<Map<String, Object>> maps = baseProcedureMapper.selectMaps(baseProcedureQueryWrapper);
        maps.forEach(System.out::println);
    }

子查询如何操作

通过inSql方法,传入字段,以及子查询sql即可。
案例比较简单,仅仅用来测试,无实际意义

    @Test
    public void testSelect02(){
        //子查询
        //SELECT * from base_procedure
        //WHERE id = (SELECT  id from base_procedure WHERE id = 'ef5397a26b7a469c6fe1de0e')
        QueryWrapper<BaseProcedure> baseProcedureQueryWrapper = new QueryWrapper<>();
        baseProcedureQueryWrapper.inSql("id","SELECT  id from base_procedure WHERE id = 'ef5397a26b7a469c6fe1de0e'");
        List<Map<String, Object>> maps = baseProcedureMapper.selectMaps(baseProcedureQueryWrapper);
        maps.forEach(System.out::println);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus 中,可以使用 QueryWrapper 来进行自定义查询表。QueryWrapperMyBatis-Plus 提供的一个查询条件构造器,可以帮助我们快速构建查询条件。 以下是一个示例代码,演示如何使用 QueryWrapper 进行自定义查询表: ```java // 引入必要的类 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.metadata.IPage; // 创建 QueryWrapper 对象 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); // 添加查询条件 queryWrapper.eq("age", 25); // 年龄等于 25 queryWrapper.like("name", "Tom"); // 名字包含 "Tom" // 自定义查询表 queryWrapper.table("custom_table"); // 执行查询 List<User> userList = userMapper.selectList(queryWrapper); // 打印结果 for (User user : userList) { System.out.println(user); } ``` 在上面的示例中,我们首先创建了一个 QueryWrapper 对象,并通过 `eq` 和 `like` 方法添加了两个查询条件。然后通过 `table` 方法指定了自定义的查询表名为 "custom_table"。最后,使用 selectList 方法执行查询,并将结果打印出来。 需要注意的是,QueryWrapper 还提供了很多其他的查询方法,如 `ne`、`gt`、`lt`、`ge`、`le` 等,可以根据具体需求选择使用。另外,还可以通过链式调用的方式添加多个查询条件。 希望以上信息能对您有所帮助!如有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值