Mybatis-plus 中Wrapper的使用

发布时间 2023-04-14 15:55:05作者: hviger

mybatis plus条件构造器关系图

image

1.上图绿色框为抽象类abstract
2.蓝色框为正常class类,可new对象
3.黄色箭头指向为父子类关系,箭头指向为父类

QueryWrapper

继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取

@Test
public void query(){
    QueryWrapper<Demo> queryWrapper = new QueryWrapper<>();
    //需要查询出来的字段
    queryWrapper.select("test1","test2");
    //排除或指定要查询的字段(常量在前,变量再后避免空指针)
    queryWrapper.select(Demo.class,i -> !"1111".equals(i.getTest1()));
    List<Demo> list = iTestService.list(queryWrapper);
    list.forEach(System.out::println);
}

UpdateWrapper

继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取

@Test
public void update(){
    UpdateWrapper<ManagerSection> updateWrapper = new UpdateWrapper<>();
    // 修改字段值
    updateWrapper.set("status",status);
    // 设置sql语句部分
    updateWrapper.setSql("test3 = 18");
    // where条件
    updateWrapper.eq("id",id);
    boolean result = iTestService.update(updateWrapper);
}

LambdaQueryWrapper

@Test
public void queryLambda(){
    LambdaQueryWrapper<ManagerSectionPerson> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(ManagerSectionPerson::getId,id)
            .between(ManagerSectionPerson::getInvalid,0,1);
    List<ManagerSectionPerson > personList = this.list(queryWrapper);
}

LambdaUpdateWrapper

@Test
public void updateLambda(){
    LambdaUpdateWrapper<ManagerSectionPerson> updateWrapper = new LambdaUpdateWrapper<>();
    updateWrapper.eq(ManagerSectionPerson::getId, id)
             .le(ManagerSectionPerson::getLockStatus,30)
             .set(ManagerSectionPerson::getInvalid,1)
             .setSql("status = 1");
    this.update(updateWrapper);
}

使用 Wrapper 自定义SQL

  • 在mapper文件中定义方法,方法的参数为:@Param(Constants.WRAPPER) Wrapper wrapper

  • 在sql的最后添加上:${ew.customSqlSegment} ;

注解方式 Mapper.java

@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);

XML形式 Mapper.xml

<select id="getAll" resultType="MysqlData">
    SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>

mybatis plus 封装的函数列表

image