ibatis in spring
与hibernate类似,ibatis也是一个orm解决方案,不同的是两者各有侧重。
hibernate提供了java对象到数据库表之间的直接映射,开发者无需直接涉及数据库
操作的实现细节,实现了一站式的orm解决方案。
而ibatis则采取了另一种方式,即提供java对象到sql(面向参数和结果集)的映射实
现,实际的数据库操作需要通过手动编写sql实现。
在java orm世界中,很幸运,我们拥有了这两个互补的解决方案,从而使得开发过程
更加轻松自如。
关于两者的对比,请参见笔者另一份文档:
《ibatis开发指南》http://www.xiaxin.net/ibatis_guide.rar
与hibernate in spring一节类似,这里我们重点探讨spring框架下的ibatis应用,特
别是在容器事务管理模式下的ibatis应用开发。
针对ibatis,spring配置文件如下:
ibatis-context.xml:
<?xml version="1.0" encoding="utf-8"?>
<!doctype beans public "-//spring//dtd bean//en"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="datasource"
class="org.apache.commons.dbcp.basicdatasource"
destroy-method="close">
<property name="driverclassname">
<value>net.sourceforge.jtds.jdbc.driver</value>
</property>
<property name="url">
<value>jdbc:jtds:sqlserver://127.0.0.1:1433/sample</value>
</property>
<property name="username">
<value>test</value>
</property>
<property name="password">
<value>changeit</value>
</property>
</bean>
<bean id="sqlmapclient"
class="org.springframework.orm.ibatis.sqlmapclientfactorybean">
springframework developer’s guide version 0.6
october 8, 2004 so many open source projects. why not open your documents?
<property name="configlocation">
<value>sqlmapconfig.xml</value>
</property>
</bean>
<bean id="transactionmanager"
class="org.springframework.jdbc.datasource.datasourcetransactio
nmanager">
<property name="datasource"><ref
local="datasource"/></property>
</bean>
<bean id="userdao" class="net.xiaxin.dao.userdao">
<property name="datasource">
<ref local="datasource" />
</property>
<property name="sqlmapclient">
<ref local="sqlmapclient" />
</property>
</bean>
<bean id="userdaoproxy"
class="org.springframework.transaction.interceptor.transactionpro
xyfactorybean">
<property name="transactionmanager">
<ref bean="transactionmanager" />
</property>
<property name="target">
<ref local="userdao" />
</property>
<property name="transactionattributes">
<props>
<prop key="insert*">propagation_required</prop>
<prop key="get*">propagation_required,readonly</prop>
</props>
</property>
</bean>
</beans>
对比之前的jdbc和hibernate配置,可以看到:
1. sqlmapclient节点
springframework developer’s guide version 0.6
october 8, 2004 so many open source projects. why not open your documents?
类似sessionfactory之与hibernate,这里我们引入了针对ibatis sqlmap的
sqlmapclientfactorybean配置。sqlmapclient对于ibatis的意义类似于session
与hibernate以及connection与jdbc,这里的sqlmapclient节点实际上配置了一
个sqlmapclient的创建工厂类。
configlocation属性配置了ibatis映射文件的名称。
2. transactionmanager节点
这里我们的transactionmanager配置与之前jdbc示例中相同,都采用了
datasourcetransactionmanager,这与hibernate有些差异。
3. userdao节点
对应的,userdao需要配置两个属性,sqlmapclient和datasource,
sqlmapclient将从指定的datasource中获取数据库连接。
其他配置基本上与jdbc示例中相同,这里就不加赘述。
本例中ibatis映射文件非常简单:
sqlmapconfig.xml:
<sqlmapconfig>
<sqlmap resource="net/xiaxin/dao/entity/user.xml"/>
</sqlmapconfig>
net/xiaxin/dao/entity/user.xml
<sqlmap namespace="user">
<typealias alias="user" type="net.xiaxin.dao.entity.user" />
<insert id="insertuser" parameterclass="user">
insert into users ( username, password) values ( #username#,
#password# )
</insert>
</sqlmap>
与hibernate示例中类似,userdao.java同样简洁:
public class userdao extends sqlmapclientdaosupport implements
iuserdao {
public void insertuser(user user) {
getsqlmapclienttemplate().update("insertuser", user);
}
}
sqlmapclientdaosupport(如果使用ibatis 1.x版本,对应支持类是
sqlmapdaosupport)是spring中面向ibatis的辅助类,它负责调度datasource、
springframework developer’s guide version 0.6
october 8, 2004 so many open source projects. why not open your documents?
sqlmapclienttemplate(对应ibatis 1.x版本是sqlmaptemplate)完成ibatis操作,
而dao则通过对此类进行扩展获得上述功能。上面配置文件中针对userdao的属性设
置部分,其中的属性也是继承自于这个基类。
sqlmapclienttemplate对传统sqlmapclient调用模式进行了封装,简化了上层访问
代码。
user.java沿用之前hibernate示例中的代码。
测试代码也几乎相同:
inputstream is = new fileinputstream("ibatis-context.xml");
xmlbeanfactory factory = new xmlbeanfactory(is);
iuserdao userdao = (iuserdao)factory.getbean("userdaoproxy");
user user = new user();
user.setusername("sofia");
user.setpassword("mypass");
userdao.insertuser(user);
闽公网安备 35060202000074号