关于iBatis多数据源、通配符配置
iBatis是一个基于Java的持久层框架,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。相比Hibernate,iBatis支持自定义SQL的灵活配置,深深吸引了我。同时另一著名的开源框架Spring对iBatis也提供了强大的技术支持,二者完美的结合可以大幅度提高开发效率。在实际的运用中,如果不想依赖spring框架,又想使用iBatis,在某些场景下,有一定的缺陷,如多数据源、通配符等。本文以iBatis2.3版本为例,给出解决思路,仅供参考。
1.iBatis多数据源的支持
采用spring的bean注入的方式,可以很方便地支持多数据源。以下两种方式可以在脱离spring实现同样的效果。
(1)iBatis提供了数据源的配置,如下:
(2)通过以上方式配置好不同的数据源,并保存为<pre>SqlMapConfig\_DS1.xml,SqlMapConfig\_DS2.xml,SqlMapConfig\_DS3.xml
</pre>。
(3)读取不同的配置文件构造不同的SqlMapClientImpl。
(4)拿到SqlMapClientImpl实例后,做CRUD操作即可。
即不用iBatis进行数据源配置,去掉上述的xml配置,自定义Connection传给iBatis使用。一句话即可搞定。
这种用法Connection的事务管理、资源分配需要我们自己写额外的代码去维护。
2.iBatis通配符配置
一般情况下,我们会把sql按照不同的模块配置在不同的xml里。传统的方式,我们需要不停地修改SqlMapConfig.xml。如果可以支持通配符,那就一劳永逸了。同样,spring提供了这样的配置:
脱离了spring,iBatis自身是不支持通配符的,那我们要做的就是更改com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser
的addSqlMapNodelets()
方法。以下是iBatis原有代码:
改动如下:
把原有后半部分代码提取为方法addSqlMapConfigFiles:
如果有通配符配置,自定义getAllResource方法,通过getFilePath递归得到所有匹配到的xml资源文件:
由此可以看出,spring对iBatis的良好支持,已经为我们做了大量的封装工作,但也带来额外的bean配置,看个人取舍了。