Mybatis databaseIdProvider数据库厂商标识

       在相同数据库厂商的环境下,数据库厂商标识没有什么意义,在实际的应用中使用得比较少,因为使用不同厂商数据库得系统还是比较少得。Mybatis可能会运行在不同厂商得数据库中,它为此提供一个数据库标识,并提供自定义,它的作用在于指定SQL到对应的数据库厂商提供的数据库中运行。

1、系统默认的规则,mybatis提供默认的规则:

type="DB_VENDOR"是启动Mybatis内部注册的策略器。首先Mybatis会将你的配置读入Configuration类里面,在连接数据库后调用getDatabaseProductName()方法去获取数据库的信息,然后用我们配置的name值取做匹配来得到DatabaseId。

我们也可以指定SQL在哪个数据库厂商执行,我们把Mapper的XML配置修改一下:

在多了一个databaseId属性的情况下,Mybatis将提供如下规则。

  • 如果没有配置databaseIdProvider标签,那么databaseId就会返回null
  • 如果配置了databaseIdProvier标签,Mybatis就会用配置的name值去匹配数据库信息,如果匹配得上就会设置databaseId,否则依旧为null
  • 如果Configuration得databaseId不为空,则它只会找到配置databaseId得SQL语句
  • Mybatis会加载不带databaseId属性和带有匹配当前数据库databaseId属性得所有语句。如果同时找到带有databaseId和不带databaseId得相同语句,则后者会被舍弃

2、不使用系统默认规则

Mybatis也提供规则允许自定义,我们只要实现databaseIdProvider接口,并且实现配置即可,看下面实例代码:

 

其次,注册这个类到MyBatis上下问环境中,我们这样配置databaseIdProvider标签:

我们把type修改为我们自己实现的类,类里面setProperties方法的参数传递进去的将会是我们在XML里面配置的信息,我们保存在类的变量Properties里,方便以后读出。在方法getDatabaseId中,传递的参数是数据库数据源,我们获取其名称,然后通过properties的键值找到对应的databaseId。

如有特殊的要求,我们可以根据自己所需要的规则来编写databaseIdProvider,配置Mapper、使用规则和默认规则是一致的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章