8.3 集成iBATIS
iBATIS是一个半自动化的ORM框架,需要通过配置方式指定映射SQL语句,而不是由框架本身生成(如Hibernate自动生成对应SQL来持久化对象),即Hibernate属于全自动ORM框架。
Spring提供对iBATIS 2.X的集成,提供一致的异常体系、一致的DAO访问支持、Spring管理事务支持。
Spring 2.5.5+版本支持iBATIS 2.3+版本,不支持低版本。
8.3.1 如何集成
Spring通过使用如下Bean进行集成iBATIS:
- SqlMapClientFactoryBean:用于集成iBATIS。
configLocation和configLocations:用于指定SQL Map XML配置文件,用于指定如数据源等配置信息;
mappingLocations:用于指定SQL Map映射文件,即半自动概念中的SQL语句定义;
sqlMapClientProperties:定义iBATIS 配置文件配置信息;
dataSource:定义数据源。
如果在Spring配置文件中指定了DataSource,就不要在iBATIS配置文件指定了,否则Spring配置文件指定的DataSource将覆盖iBATIS配置文件中定义的DataSource。
接下来示例一下如何集成iBATIS:
1、准备需要的jar包,从spring-framework-3.0.5.RELEASE-dependencies.zip中拷贝如下jar包:
com.springsource.com.ibatis-2.3.4.726.jar
2、 对象模型定义,此处使用第七章中的UserModel;
3、 iBATIS映射定义(chapter8/sqlmaps/UserSQL.xml):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="UserSQL"> <statement id="createTable"> <!--id自增主键从0开始 --> <![CDATA[ create memory table test( id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name varchar(100)) ]]> </statement> <statement id="dropTable"> <![CDATA[ drop table test ]]> </statement> <insert id="insert" parameterClass="cn.javass.spring.chapter7.UserModel"> <![CDATA[ insert into test(name) values (#myName#) ]]> <selectKey resultClass="int" keyProperty="id" type="post"> <!-- 获取hsqldb插入的主键 --> call identity(); <!-- mysql使用select last_insert_id();获取插入的主键 --> </selectKey> </insert> </sqlMap>
4、 iBATIS配置文件(chapter8/sql-map-config.xml)定义:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings enhancementEnabled="true" useStatementNamespaces="true" maxTransactions="20" maxRequests="32" maxSessions="10"/> <sqlMap resource="chapter8/sqlmaps/UserSQL.xml"/> </sqlMapConfig>
5、 数据源定义,此处使用第7章的配置文件,即“chapter7/applicationContext-resources.xml”文件。
6、 SqlMapClient配置(chapter8/applicationContext-ibatis.xml)定义:
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <!-- 1、指定数据源 --> <property name="dataSource" ref="dataSource"/> <!-- 2、指定配置文件 --> <property name="configLocation" value="chapter8/sql-map-config.xml"/> </bean>
7、 获取SqlMapClient:
package cn.javass.spring.chapter8; //省略import public class IbatisTest { private static SqlMapClient sqlM