问题:最近实现Java的Excel的导入功能,要求支持不同的数据库,比如Oracle、Mysql、SqlServer。尽量通过在插入sql时去判断不同的数据库,而不是通过Java代码。
解决方法:
在网上搜了很多资料,大部分都是通过spring+mybatis的方式实现的,我自己也试了一下,可能是由于自己没有配置对,结果一直没成功。看了mybatis的官网(http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html)于是换了一种思路,直接通过mybatis去实现。下面是我的配置:
<insert id="batchInsertLine" parameterType="HashMap">
INSERT INTO ${tableName}(${columnNames})
<if test="_databaseId == 'MySQL' or _databaseId == 'Microsoft SQL Server'">
values
<foreach collection="valueList" item="item" index="index"
separator=",">
(
<foreach collection="item" index="key" item="_value"
separator=",">
#{_value}
</foreach>
)
</foreach>
</if>
<if test="_databaseId == 'Oracle'">
<![CDATA[
select result.* from(
]]>
<foreach collection="valueList" item="item" index="index"
separator="union all">
(select
<foreach collection="item" index="key" item="_value"
separator=",">
#{_value}
</foreach>
from dual)
</foreach>
<![CDATA[) result]]>
</if>
</insert>
这是通过批量插入数据,由于Oracle和sqlserver插入语句不一样,所以要判断一下。
databaseId来标识不同的数据库,其值是数据库产品的名称。
也可以参照mybatis官网的“动态SQL”下的“Multi-db vendor support”也可
参考资料:
http://herry.iteye.com/blog/1488271