通过注解生成mybatis-plus的wrapper
项目地址
github: https://github.com/NanyouqiaoM/annotation-wrapper
gitee: https://gitee.com/anZhi_RuoSu/annotation-wrapper.git
1应用场景
在使用mybatis-plus进行查询时构造wrapper时往往会有很多重复代码,大部分情况下构造wrapper时代码是这样的:
public List<User> list(QueryUserParam queryParam) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.in(!CollectionUtils.isEmpty(queryParam.getRoleIdList()), User::getRoleId, queryParam.getRoleIdList());
wrapper.le(queryParam.getMaxAge() != null, User::getAge, queryParam.getMaxAge());
wrapper.like(StringUtils.hasText(queryParam.getNameKeyword()), User::getName, queryParam.getNameKeyword());
//省略其他条件
return userMapper.selectList(wrapper);
}
使用annotation-wrapper,可以省略这些重复wrapper构建过程,使开发者精力更专注与业务。效果如下:
public List<User> list1(QueryUserParam queryParam) {
//实现接口
List<User> plainUsers = userMapper.selectList(queryParam.lambdaWrapper());
//WrapperGenerator.generateWrapper()生成 两种方式任选其一
//List<User> plainUsers = userMapper.selectList(WrapperGenerator.generateWrapper(param));
return plainUsers;
}
2快速开始
2.1 引入maven依赖:
先添加repositories节点
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
然后添加如下maven依赖
<dependency>
<groupId>com.github.NanyouqiaoM</groupId>
<artifactId>annotation-wrapper</artifactId>
<version>1.1</version>
<!--如已引用mybatis-plus可排除annotation-wrapper集成的mybatis-plus-->
<!--<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
</exclusion>
</exclusions>-->
</dependency>
2.2开始使用
创建查询类:
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class QueryUserParam implements AnnotationWrapper {
/**
* 主键ID
*/
@Wrapper(SqlType.EQ)
Long id;
/**
* 姓名
*/
@Wrapper(SqlType.LIKE)
String nameKeyword;
/**
* 年龄
*/
@Wrapper(value = SqlType.LE, column = "age")
Integer maxAge;
/**
* 邮箱
*/
@Wrapper(value = SqlType.EQ)
String email;
/**
* 角色ID
*/
@Wrapper(SqlType.IN)
List<Long> roleIdList;
}
在需要生成查询条件的字段上添加@Wrapper注解
@Wrapper可以传递两个参数value 和column ,value为SqlType枚举类,如IN、EQ、LIKE等,与Wrapper的IN、EQ、LIKE方法相等。column 为字段值,为空时默认为采用字段驼峰转下划线。如nikeName会自动转为nike_nake。
生成wrapper:
生成wrapper有两种方式,一种实现AnnotationWrapper 接口,
另外一种直接调用(WrapperGenerator.generateWrapper()方法,两种方法任选其一,代码如下:
QueryUserParam queryParam=new QueryUserParam();
queryParam.setMaxAge(12);
//省略其他set方法
//实现接口=====生成wrapper
LambdaQueryWrapper<User> wrapper =queryParam.lambdaWrapper();
//调用WrapperGenerator.generateWrapper()=====生成wrapper
LambdaQueryWrapper<User> wrapper1 = WrapperGenerator.generateWrapper(queryParam);
使用效果如下:可以看到使用注解生成的wrpper与原生方式结果一样。