问题描述
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.13</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
mybatis-plus开启多租户插件功能时,在进行链表查询时会重复出现on导致sql语句报错
- 原始xml文件中的sql
select t.* from t_role t left join t_user t2 on t.id=t2.id
- mybatis-plus开启多租户插件功能时解析的sql后,会出现重复On
ON t.id = t2.id AND t2.tenant_id = '1' ON t.id = t2.id
SELECT
t.*
FROM
t_role t
LEFT JOIN t_user t2
ON t.id = t2.id AND t2.tenant_id = '1' ON t.id = t2.id
WHERE
t.tenant_id = '1'
原因分析
原因是引入的分页拆件中的jsqlparser解析器和mybatis-plus的jsqlparser解析器冲突了,导致默认采用了分页拆件的jsqlparser解析器
分页拆件中的jsqlparser解析器,在处理left join on表达式是这样的
mybatis-plus的jsqlparser解析器,在处理left join on表达式是这样的
解决办法
排除pagehelper-spring-boot-starter的jar中的jsqlparser依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<artifactId>mybatis-spring</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
<exclusion>
<artifactId>mybatis</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>