您的位置:首页 > 数据库

mybatis的多数据库支持

2013-11-05 14:01 567 查看
多数据库要求在不同底层上随意切换

一:纯mybatis,就是只使用mybatis这一个框架

a)取巧的办法

写一个配置文件,类型里标注出数据库类型来,如下:

dbtype = oracle/mysql/sqlserver
.
.
.

这样在程序里通过取该字符串判断一下,来选择加载不同的mybatis配置文件,如下

String resource = "mybatis.xml";
if (Util.xmlInfo.getDbType().contains("mysql")) {
resource = "mybatis_mysql.xml";
}eles if(Util.xmlInfo.getDbType().contains("sqlserver")) {
resource = "mybatis_sqlserver.xml";}

这样,在每个配置文件的mapper中,通过不同的映射文件,达到多方言支持的效果,如下

mybatis_oracle.xml
...
<mappers>
<mapper resource="com/xiaoxian/SqlMapper_user_orale.xml"/>
<mapper resource="com/xiaoxian/SqlMapper_teacher_oracle.xml"/>
</mappers>
...

mybatis_mysql.xml
...
<mappers>
<mapper resource="com/xiaoxian/SqlMapper_user_mysql.xml"/>
<mapper resource="com/xiaoxian/SqlMapper_teacher_mysql.xml"/>
</mappers>
...

mybatis_sqlserver
...
<mappers>
<mapper resource="com/xiaoxian/SqlMapper_user_sqlserver.xml"/>
<mapper resource="com/xiaoxian/SqlMapper_teacher_sqlserver.xml"/>
</mappers>
...

这样,每次启动时,通过修改外部配置文件中的dbtype,即可获取到恰当的数据库方言映射文件

缺点是比较繁琐,功能扩展以及修改时,往往要同步好几个文件。

b)使用框架的特性

mybatis3.1.1起,本身可以支持多数据库。

首先你要在mybatis.xml文件中添加如下配置

<databaseIdProvider type="DB_VENDOR">
<property name="SQL value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle" />
<property name="Adaptive Server Enterprise" value="sybase"/>
<property name="MySQL" value="mysql" />
</databaseIdProvider><!-- name是数据库厂商名,value是你自己的标识名 -->


这个name如果不知道该填什么,可以用如下代码获取

Connection conn = dataSource.getConnection();
DatabaseMetaData metaData = conn.getMetaData();
return metaData.getDatabaseProductName();

然后,在sql映射文件里。要如下写sql,在后面加上数据库标记

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.boco.iwms.base.dao.BasicSqlDao">
<select id="getCountOfSql" resultType="int" useCache="false" statementType="STATEMENT" timeout="5000" databaseId="mysql">
<![CDATA[
SELECT COUNT(*) FROM user
]]>
</select>

<select id="getCountOfSql" resultType="int" useCache="false" statementType="STATEMENT" timeout="5000" databaseId="oracle">
<![CDATA[
SELECT COUNT(*) FROM user
]]>
</select>
</mapper>

这样程序会自动识别数据库,根据你配置的value和databaseId来寻找合适的sql方言。

只能支持3.1.1及其以上版本
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: