赞
踩
github: https://github.com/NanyouqiaoM/annotation-wrapper
gitee: https://gitee.com/anZhi_RuoSu/annotation-wrapper.git
在使用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;
}
先添加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>
创建查询类:
@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与原生方式结果一样。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。