MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

2023-01-05 0 1,099

1、甚么是Mybatis-plus-join?

Mybatis-plus-join是网路上的元老为化解Mybatis-plus做多表相连查阅狼狈而合作开发的两个辅助工具,它能如前所述Mybatisplus展开机能升级换代,使其无须受制于皮夏涅查阅,当中生前归纳有几点:

对mybatis-plus展开机能升级换代 ,提升合作开发工作效率;采用方式与Mybatis-plus那样 ,自学工作效率高;减少了 多表相连查阅 机能,彻底摆脱xml模式多表相连;2、浏览Mybatis-plus-join

Mybatis-plus-join现阶段正式发布在Gitee上,间接将其布季夫/浏览到邻近地区方可:

浏览门牌号:

https://gitee.com/best_handsome/mybatis-plus-join

特别注意:须要 Mybatis-plus version >= 3.4.0

浏览结论如图:

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

3、采用Maven将其装箱成jar包 3.1、采用idea装箱

1.依照右图展开装箱操作方式:

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

2.装箱获得成功后,jar包存有的产品目录,找出jar圣塞雷县导入到他们的工程项目中:

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

3.将打出来的jar包引入工程模块中,步骤如图(如果跳出版本问题,则点击更新方可):

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

4.工程项目中引用Mybatis-plus-join的pom.xml配置

在pom.xml中引入该倚赖:

com.github.yulichang mybatis-plus-join 1.1.6

引入效果(检查时提示更新就更新部分环境方可)

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

5、让mybatis-plus-join在DataScopesqlInjector中生效

1.修改DataScopeSqlInjector中的继承类为:MPJSqlInjector

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

6、启动类排除MPJSqlInjector.class

排除MPJSql注入器的语句

@SpringBootApplication(exclude = {MPJSqlInjector.class})

1.在主启动类中排除MPJ的sql注入器

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

2.如果自定义了配置类,则在配置类中添加排除

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

7.检查启用mybatis-plus-join是否获得成功

重启启动类正常启动则说明配置获得成功,请转到第8步如果出现下列错误,说明第6步没有配置好,要检查*************************** APPLICATION FAILED TO START *************************** Description: file [D:package\admin\mapper\SysOauthClientDetailsMapper.class] required a single bean, but 2 were found: – dataScopeSqlInjector: defined by method dataScopeSqlInjector in class path resource [package/common/data/mybatis/MybatisPlusConfiguration.class] – com.github.yulichang.injector.MPJSqlInjector: defined in null – Action: Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed 8、在业务中采用mybatis-plus-join的准备

采用

mapper继承MPJBaseMapper (必选)service继承MPJBaseService (可选)serviceImpl继承MPJBaseServiceImpl (可选)

继承效果如下

mapper

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

serviceImpl

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

9.采用mybatis-plus-join展开多表查阅(例子)

1.DTO类

package *.admin.api.dto; import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; @Data public class ObOutPoolDto { /** * 表1:物品表 */ private String name; //物品名称 private String standard; //物品规格 private String unit; //物品单位 private BigDecimal price; //物品价格 private BigDecimal count;//物品库存数量 /** * 表2:订皮夏涅 */ private String drawNumber; //表单流水号 public Integer poolId; //库存id private Integer needCount;//出库数量 private String person;//申请人 private LocalDateTime takeTime;//任务时间 private String department;//部门 private String updatedBy;//更新人 private LocalDateTime updatedTime;//更新时间 private Integer id;//id private String remark;//备注 }

2.serviceImpl

package * import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.springframework.stereotype.Service; import java.util.List; /** * 出库商品 * @author * @date 2021-04-23 14:25:26 */ @Service public class ObOutPoolItemServiceImpl extends MPJBaseServiceImpl implements ObOutPoolItemService { // 定义两个枚举类型 enum Signal { FINISH(“完成”,1),ORDER(“订单”,2); private String name; private int index; // 构造方式 private Signal(String name,int index) { this.name = name; this.index = index; } } /** * 外部jar包全力支持的相连查阅并分页,弥补mytabisplus的不足 * 分页查阅 */ @Override public IPage mypage(Page page, ObOutPoolItem obOutPoolItem, String[] createdTimeArr){ IPage page1 = baseMapper.selectJoinPage( page, //分页参数 ObOutPoolDto.class, //返回的DTO层数据, mpjLambdaWrapper(MPJ(),obOutPoolItem,createdTimeArr,Signal.FINISH.name)); //MPJWrapper return page1; } /** * 依照订单号查阅商品 * @param orderNumber * @return */ @Override public List queryByOrderNumber(String orderNumber){ List list = baseMapper.selectJoinList( ObOutPoolDto.class, mpjLambdaWrapper(MPJ(),new ObOutPoolItem() ,new String[0] ,Signal.ORDER.name,orderNumber)); return list; } //基础相连查阅MPJ对象 @Override public MPJLambdaWrapper MPJ(){ MPJLambdaWrapper mpj = new MPJLambdaWrapper() .selectAll(ObOutPoolItem.class) //查阅表1所有内容 .selectAll(ObPool.class) //查阅表2所有内容 .leftJoin(ObPool.class,ObPool::getId,ObOutPoolItem::getPoolId) //左相连表1,条件为表1库存id 等于 表2 id .leftJoin(ObOutPool.class,ObOutPool::getDrawNumber,ObOutPoolItem::getDrawNumber); //左相连表2,用订单号匹配 return mpj; } /** * 根据需求模糊生成条件 *后期生成泛型采用类替代此方式 */ private MPJLambdaWrapper mpjLambdaWrapper( MPJLambdaWrapper mpj, ObOutPoolItem obOutPoolItem,String[] createdTimeArr,String… status ){ //模糊查阅部门 if(!(obOutPoolItem.getDepartment()==null)){ mpj.likeRight(ObOutPoolItem::getDepartment, obOutPoolItem.getDepartment()); } // 模糊匹配时间 if(createdTimeArr != null && createdTimeArr.length > 0 && createdTimeArr[0].length() > 0){ mpj.ge(ObOutPoolItem::getCreatedTime,createdTimeArr[0]) .le(ObOutPoolItem::getCreatedTime,createdTimeArr[1]); } //完成与订单号查阅 if(status[0].equals(Signal.FINISH.name)){ mpj.eq(ObOutPool::getTaskStatus, TaskStatusEnum.COMPLETED.getStatus()); //完成条件 }else if (status[0].equals(Signal.ORDER.name)){ mpj.eq(ObOutPool::getDrawNumber,status[1]); } return mpj; } }

3.接口返回结论

MyBatis-Plus 不支持联表?一个依赖轻松搞定,非常牛逼!

10、mybatis-plus-join更多采用方式请参看Gitee

0499/article/details/116517163

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务