前言

mybatis提供了一个_databaseId默认参数,可以实现一个mapper支持多个类型的数据库,比如当你的产品需要支持sqlserver和mysql的时候,两个数据库的sql不一样,这个时候通过这个标识就可以实现同一个项目里同一个mapper里支持两种数据库的场景。

场景描述

根据mybatis官方文档(https://mybatis/mybatis-3/zh/configuration.html)和百度搜到的各种文档,给的配置都是如下:

第一步配置mybatis配置文件,第二步在mapper里指定databaseId。
但是按照官方的方法在mybatis-plus下都不能实现一个mapper里有多个类型数据库的sql

问题

但是实际执行效果一直不执行databaseId判断里的语句。
写了一段如下sql,直接把_databaseId打印出来

<select>
select a.*,#{_databaseId} from table_a
<select/>

打印的参数取到的是null。
找到这个dataBaseIdProvider的实现类,获取databaseId的断点进不去。因此判断这段逻辑根本没有执行到,可能被跳过了,联想到mybatis-plus会对mybatis做一些封装,看了一下mybatis-plus是否有对应属性,通过开发工具的自动提示配置发现果然有。

解决

最后在yml中加入如下配置解决问题

mybatis-plus:
 configuration:
  database-id: oracle

并且这个不受mybatis-config的影响,只看配置,配置的值就是

<select>
select a.*,#{_databaseId} from table_a
<select/>

这里打印的值,test也能判断出来

更多推荐

mybatis-plus下_databaseId的使用