解决MybatisPlus多数据源下关键字冲突问题

都知道mysql解决冲突的办法为在存在冲突的字段上加``,mybatis可以在@TableField注解上加``

但该解决方法不适用于多数据源的情况,例如达梦数据库需要加"",Oracle数据库可以加""也可以不做处理,因此需要其他的方法。

MybatisPlus的InnerInterceptor 可以解决该问题,原理就是在查询前修改SQL,代码如下


public class MybatisKeywordInterceptor implements InnerInterceptor {
    @Override
    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
        DbType dbType = JdbcUtils.getDbType(executor);
        String buildSql = boundSql.getSql();
        String newSql="";
        if(dbType == DbType.MYSQL){
            newSql = buildSql
                .replaceAll(" range,", "`range`,")
                .replaceAll(",range,", ",`range`,")
                .replaceAll(",range ", ",`range`")
                .replaceAll(" range ", "`range`")

                .replaceAll(" RANGE,", "`RANGE`,")
                .replaceAll(",RANGE,", ",`RANGE`,")
                .replaceAll(",RANGE ", ",`RANGE`")
                .replaceAll(" RANGE ", "`RANGE`")

                .replaceAll(" language,", "`language`,")
                .replaceAll(",language,", ",`language`,")
                .replaceAll(",language ", ",`language`")
                .replaceAll(" language ", "`language`")

                .replaceAll(" LANGUAGE,", "`LANGUAGE`,")
                .replaceAll(",LANGUAGE,", ",`LANGUAGE`,")
                .replaceAll(",LANGUAGE ", ",`LANGUAGE`")
                .replaceAll(" LANGUAGE ", "`LANGUAGE`");
        }
        PluginUtils.MPBoundSql mpBoundSql = PluginUtils.mpBoundSql(boundSql);
        mpBoundSql.sql(newSql);
    }
}
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 自定义查询重写
        interceptor.addInnerInterceptor(mybatisKeywordInterceptor());
        return interceptor;
    }

    /**
     * 自定义关键字查询重写插件
     */
    public MybatisKeywordInterceptor mybatisKeywordInterceptor(){
        return new MybatisKeywordInterceptor();
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值