mybatisplus 的好处就不用多说了,带给我们最大的好处就是不用再重复编写那些简单的sql语句。但是多表查询的时候却还是不得不用xml来解决,但是想要偷懒,不想写xml,于是去网上搜索了下是否有连表插件,居然还真有。于是乎就拿下来试用下,问题就来了,由于项目里有写过自定义的sql注入器,加上链表插件后,启动居然报错了,于是乎查看源码分析原因,发现连表插件里也用到了sql注入器,原来如此,现在问题显而易见了。

因为连表插件里和项目原先配置里都有sql注入器,导致springboot容器在实例化类时不知选择哪一个,所以报错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。

看错误原因就知道该如何解决了,在项目原有的sql注入器实现类上加上@Primary 注解,意思是默认优先选择:

public class MybatisPlusConfig {/*** 分页插件 */@Beanpublic MybatisPlusInterceptor paginationInterceptor() {//连表插件interceptor.addInnerInterceptor(new MPJInterceptor());//多租户,垃圾sql拦截插件......return interceptor;}/*** sql注入*/@Bean@Primarypublic MySqlInjector myLogicSqlInjector() {return new MySqlInjector();}

这样虽然解决了报错问题,但是新的问题又出现了,由于设置了@Primary 默认加载,意味着连表插件里的功能就没法加载进去了,所以需要手动把里面实现的方法重新加入到项目里原有的sql注入器里:

1、先查看连表插件的源码,找到sql注入器的加载类,如下

package com.github.yulichang.injector;import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.github.yulichang.method.*;import java.util.List;/*** SQL 注入器** @author yulichang* @see DefaultSqlInjector*/
public class MPJSqlInjector extends DefaultSqlInjector {@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {List<AbstractMethod> list = super.getMethodList(mapperClass);list.add(new SelectJoinOne());list.add(new SelectJoinList());list.add(new SelectJoinPage());list.add(new SelectJoinMap());list.add(new SelectJoinMaps());list.add(new SelectJoinMapsPage());return list;}
}

2、将注入器里添加的方法添加到项目原有的sql注入器里,如下:

import java.util.List;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import com.github.yulichang.method.SelectJoinList;
import com.github.yulichang.method.SelectJoinMap;
import com.github.yulichang.method.SelectJoinMaps;
import com.github.yulichang.method.SelectJoinMapsPage;
import com.github.yulichang.method.SelectJoinOne;
import com.github.yulichang.method.SelectJoinPage;/***  @Description:注入自定义SQL方法*  @author: zijin.lee *  @date:  2021年4月6日*/
public class MySqlInjector extends DefaultSqlInjector {@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {//将原来的保持 List<AbstractMethod> methodList = super.getMethodList(mapperClass);//将自定义的方法传入,这里用的是上面创建对象 methodList.add(new MysqlInsertOrUpdateBatch());methodList.add(new InsertBatchSomeColumn(t->true));methodList.add(new MysqlUpdateBatch());//多表查询sql注入 从连表插件里移植过来的methodList.add(new SelectJoinOne());methodList.add(new SelectJoinList());methodList.add(new SelectJoinPage());methodList.add(new SelectJoinMap());methodList.add(new SelectJoinMaps());methodList.add(new SelectJoinMapsPage());return methodList;}}

最后保存代码,完美启动,测试功能正常,OK

论mybatisPlus 连表插件(MPJBaseMapper) 与自定义SQL注入器冲突相关推荐

  1. MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技

    问题分析 Invalid bound statement (not found) 如果你看到这一篇,说明你也是遇到这个问题的人(废话),我们在上一篇(MyBatis-Plus - 一篇带你玩转自定义 ...

  2. 记一次mybatis-plus自定义sql注入器不起作用的问题

    之前自己写过一个关于mybatis-plus多表联查的组件,原理是用到了mybatis-plus扩展的口(sql注入),即继承DefaultSqlInjector /** @author chenga ...

  3. Java--MybatisPlus表和列;自定义SQL(三)

    阅读前可先参考 https://blog.csdn.net/MinggeQingchun/article/details/126521908 https://blog.csdn.net/MinggeQ ...

  4. jpa多表联查动态_jpa多表关联动态查询(自定义sql语句)

    项目中,jpa对于简单的数据库操作很方便,但如果多表关联动态查询时,需要自己去写SQL语句拼接查询条件,以下为本人学习的例子. 类似于这种多条件动态查询: 项目用的是springboot 2.1.0. ...

  5. Mybatis Plus 自定义SqlInjector sql注入器

    1.自定义sql注入器GeneralMybatisPlusSqlInjector package com.javasgj.springboot.mybatisplus.config;import ja ...

  6. MyBatis-plus执行自定义SQL

    序号 类型 地址 1 MySQL MySQL操作之概念.SQL约束(一) 2 MySQL MySQL操作之数据定义语言(DDL)(二) 3 MySQL MySQL操作之数据操作语言(DML)(三) 4 ...

  7. MyBatis-Plus 之自定义sql

    推荐:MyBatis Plus汇总 MyBatis-Plus 之自定义sql 首先创建一个数据库表,如下图所示: 然后创建一个Spring Boot项目,pom.xml和配置如下: <?xml ...

  8. mysql分表插件_分库分表简单?那我想问如何实现“分库分表插件”?

    随着系统数据量的日益增长,在说起数据库架构和数据库优化的时候,我们难免会常常听到分库分表这样的名词. 当然,分库分表有很多的方法论,比如垂直拆分.水平拆分:也有很多的中间件产品,比如MyCat.Sha ...

  9. 如何实现分库分表插件

    前言 随着系统数据量的日益增长,在说起数据库架构和数据库优化的时候,我们难免会常常听到分库分表这样的名词. 当然,分库分表有很多的方法论,比如垂直拆分.水平拆分:也有很多的中间件产品,比如MyCat. ...

  10. MybatisPlus 之 Sql 注入器

    我们已经知道,在MP中,通过AbstractSqlInjector将BaseMapper中的方法注入到了Mybatis容器,这样这些方法才可以正常执行. 那么,如果我们需要扩充BaseMapper中的 ...

最新文章

  1. 2021-07-08执行Linux的命令分析
  2. 大数据-07-Spark之流数据
  3. CCNP第四天(2) 配置、校验OSPF特殊区域类型-完全Stub区域
  4. Linux QoS egress处理流程
  5. JavaFX官方教程(十二)之树动画示例
  6. 病毒及***防御手册之五
  7. 《数据结构C语言版》——线性表详解,你一定能够看得懂学得会的宝典
  8. nsis 固定到任务栏
  9. 几行代码轻松搞定跨系统传递 traceId
  10. UI自动化学习过程get的知识点
  11. Unite'17 Shanghai再一次问候
  12. Cesium:加载百度地图
  13. su室外渲染参数设置_vray3.4 for sketchup渲染器渲染出图参数怎么设置?
  14. python xlwt用法_24.python中xlwt模块用法详解
  15. Bingo学习--jdk1.8新特性
  16. 举个栗子!Tableau技巧(6):妙用Index函数来改变数据排序
  17. 鸿蒙手机 OS 等开发必备工具,华为 DevEco Studio 2.1
  18. 国产内存真的来了:紫光可提供DDR3、DDR4内存芯片
  19. fastjson1.2.24TemplatesImpl利用链源码分析
  20. PHP项目快速接入微信功能

热门文章

  1. SQL -- 触发器(详细)
  2. 机器视觉之表面缺陷检测
  3. 实验报告C语言顺序结构程序,顺序结构程序设计-C语言程序实验报告
  4. java httpclient 关闭_httpclient 4种关闭连接
  5. 用excel和python做数据分析的优缺点
  6. matlab信号加入白噪音再分离,Matlab中给信号增加白噪声
  7. 【Linux开发板学习教程】全免费超全面超详细
  8. 【深度学习中的数学】高维矩阵乘法规则
  9. android xutils加密,xutils
  10. PHP 使用 hprose RPC 服务 系列文章之三——Laravel5.8中使用Hprose