mybatis怎么实现两种数据库的兼容?

 我来答
手牵手的幸福cl
高粉答主

推荐于2019-08-12 · 每个回答都超有意思的
知道大有可为答主
回答量:380
采纳率:100%
帮助的人:6.5万
展开全部

在系统运行过程中,针对不同数据库类型区分加载不同文件路径下的sqlmap配置。

留给开发人员做的事依旧是快乐地编写原始数据库语句,而不再为多数据库兼容问题挠头。

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pieryon
2018-02-04 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14411 获赞数:166864
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
方法:在系统运行过程中,针对不同数据库类型区分加载不同文件路径下的sqlmap配置。留给开发人员做的事依旧是快乐地编写原始数据库语句,而不再为多数据库兼容问题挠头。
分析问题:
1、解决ibatis多数据库兼容的问题,实际上就是让ibatis可以自动选择不同数据库sqlmap配置文件。
2、打开ibatis源码工程并进行代码跟踪,最终定位到com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.java处,系统中运行的sqlmap节点均从这里统一转化加载的。
3、很明显SqlMapConfigParser源码中的addSqlMapNodelets负责解析“/sqlMapConfig/sqlMap”路径,即也就是sqlmap文件路径。
4、要实现“多数据库兼容”,这里改造下这个方法即可。

解决方法:
1、首选我们在<setting>节点新增一个“DBProductName”用于判断数据库种类。当然通过java.sql.DatabaseMetaData也可以获得,但这太依赖于jdbc驱动,还是手动配置保险。
2、重构SqlMapConfigParser的addSqlMapNodelets方法。
" 1)首选获得单个sqlmap文件的位置,如 sqlmap主目录\XXX.xml;
2)依据上面设置的DBProductName属性值获得数据库类型;
3)将sqlmap的文件路径重定位到运行数据库类型文件下。如 sqlmap主目录\mysql\XXX.xml,代表程序当前运行于msql数据库上,并加载系统mysql数据库对应的 sqlmap文件"
4、ok,现在ibatis支持“多数据库兼容”了(完整源码见附件)。

使用方法:
1、编译SqlMapConfigParser.java生成可运行文件SqlMapConfigParser.class(见附件),并将其覆盖添加到ibatis.jar中。
2、在系统sqlmap配置文件存放主目录如src\conf\mapping添加多数据库兼容支持的子目录,如src\conf\mapping\mysql,src\conf\mapping\oracle等
3、以实际项目需要编写多数据库sqlmap配置文件。注意:不同数据库类型需要确保具有相同的sqlmap配置文件名和sql节点名
4、在ibatis主配置文件(如sql-map-config.xml)中,<setting>指定当前程序运行数据库类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式