Mybatis plus 条件构造器

条件构造器 condition 作用

我们看源码lt接口

default Children lt(R column, Object val) {
        return lt(true, column, val);
    }
Children lt(boolean condition, R column, Object val);

这个condition代表是否加入sql语句中。假设我们有这样的需求,如果'age'字段存在,则必须小于120。我们可以写成下面方式

lt(StringUtils.isNotEmpty(age), 'age', age)

创建条件构造器时传入实体对象

User user = new User();
        user.setAge(33);
        user.setUserId(1);
        QueryWrapper queryWrapper = new QueryWrapper<>(user);

设置的条件加入到Where语句中WHERE user_id=? AND age=?。默认是等值的。如果我们需要对默认行为进行更改。

@TableField(condition = "%s<#{%s}")
    private int age;

allEq

对于等值查询的更加细粒度的控制。

allEq(Map params)
allEq(Map params, boolean null2IsNull)
allEq(boolean condition, Map params, boolean null2IsNull)
  • 简单使用
Map map = new HashMap<>();
map.put("name", "ceshi");

QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.allEq(map);
  • age 字段返回的是null
map.put("age", null);

这时候SQL语句为WHERE name = ? AND age IS NULL
这时候allEq 的第二个参数null2IsNull,代表值为null时候是否忽略(默认为true)。如果传递false则默认忽略null情况

  • 传递lambda更加细粒度控制
    只保留name字段条件 'user WHERE name = ?'
queryWrapper.allEq((k,v) -> k.equals("name"), map);

selectMaps

QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.select("user_id", "name");


        List  users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);

上面返回有大量的null的值
User(userId=1, realName=null, age=0, createTime=null)
我们使用selectMaps

List>  users = userMapper.selectMaps(queryWrapper);

看到返回结果只有需要的字段{name=chenshi, userId=1}

selectCount

Integer  count = userMapper.selectCount(queryWrapper);

SQL 语句
SELECT COUNT( 1 ) FROM user

selectOne

用于只返回一条语句的值

QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("age",33).eq("name","chenshi");
User  users = userMapper.selectOne(queryWrapper);

如果返回多条值,则会报错。

lambda条件构造器

LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(User::getAge, 30);

相比之前的条件构造器的形式,lambda条件构造器的好处可以在编译的时候进行检查

使用条件构造器的自定义SQL

  1. 使用注解方法
@Select("select * from user ${ew.customSqlSegment}")
    List selectAll(@Param(Constants.WRAPPER)Wrapper wrapper);
  1. 使用XML方式
  • 配置MP扫描路径
mybatis-plus:
  mapper-locations: com/naruto/mamba/mapper/*
  • 定义XML文件




    

  • Mapper中关联自定义SQL
public interface UserMapper extends BaseMapper {

    List selectAll(@Param(Constants.WRAPPER)Wrapper wrapper);
}

你可能感兴趣的:(Mybatis plus 条件构造器)