步骤七:Spring 集成 Ibatis

导入 iBatis相关JAR包:ibatis-2.3.4.726.jar

 

配置文件: Jdbc 连接的属性文件( jdbc.properties
 
  
  1. driverClassName=oracle.jdbc.driver.OracleDriver  
  2. url=jdbc:oracle:thin:@localhost:1521:orcl    
  3. username=scott     
  4. password=tiger 

 

 

配置文件:Spring配置文件(applicationContext.xml

 
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans 
  3.     xmlns="http://www.springframework.org/schema/beans" 
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  5.     xmlns:p="http://www.springframework.org/schema/p" 
  6.     xsi:schemaLocation="  
  7.         http://www.springframework.org/schema/beans   
  8.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
  9.     <bean id="propertyConfigurer"   
  10.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
  11.         <property name="locations"> 
  12.             <list> 
  13.                 <value>/WEB-INF/jdbc.properties</value> 
  14.             </list>           
  15.         </property> 
  16.       
  17.     </bean> 
  18.     <!-- 配置数据源  --> 
  19.      <bean id="dataSource"     
  20.         class="org.apache.commons.dbcp.BasicDataSource"     
  21.         destroy-method="close"> 
  22.         <!--JDBC驱动-->     
  23.         <property name="driverClassName" value="${driverClassName}" />   
  24.         <!--数据库URL-->    
  25.         <property name="url" value="${url}" />    
  26.         <!--数据库用户名-->   
  27.         <property name="username" value="${username}" />    
  28.         <!--数据库密码-->   
  29.         <property name="password" value="${password}" />     
  30.     </bean>     
  31.     <!-- 事务管理器 --> 
  32.     <bean id="transactionManager"     
  33.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">     
  34.         <property name="dataSource" ref="dataSource" />     
  35.     </bean>   
  36.     <!-- 事务代理基类 --> 
  37.     <bean id="txProxyTemplate" abstract="true" 
  38.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
  39.         <property name="transactionManager" ref="transactionManager"></property> 
  40.         <property name="transactionAttributes"> 
  41.             <props> 
  42.                 <prop key="do*">PROPAGATION_REQUIRED,-Exception</prop> 
  43.             </props> 
  44.         </property> 
  45.     </bean>   
  46.     <!-- 根据数据访问资源,实例化SqlMapClient对象 --> 
  47.     <bean id="baseSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
  48.         <property name="configLocation" value="/WEB-INF/SqlMapConfig.xml"></property> 
  49.         <property name="dataSource" ref="dataSource"></property> 
  50.     </bean> 
  51.     <!-- 创建sqlMapClientTemplate --> 
  52.     <bean id="baseSqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> 
  53.         <constructor-arg> 
  54.             <ref bean="baseSqlMapClient" /> 
  55.         </constructor-arg> 
  56.     </bean> 
  57.     <!-- 实例化EmpDao,注入sqlMapClientTemplate对象 --> 
  58.     <bean id="EmpDao" class="com.test.EmpDaoImpl"> 
  59.         <property name="sqlMapClientTemplate" ref="baseSqlMapClientTemplate"></property> 
  60.     </bean> 
  61.     <!-- 实例化EmpService,注入empDao对象 --> 
  62.     <bean id="EmpService" parent="txProxyTemplate"> 
  63. <property name="target"> 
  64. <bean class="com.test.EmpServiceImpl"> 
  65.          <property name="empDao" ref="EmpDao"></property> 
  66. </bean> 
  67. </property> 
  68.     </bean> 
  69.     <!-- 实例化emp,注入empService对象 --> 
  70.     <bean name="/emp" class="com.test.EmpAction"> 
  71.         <property name="empService" ref="EmpService"></property> 
  72.     </bean> 
  73. </beans> 

配置文件:iBaits总配置文件(SqlMapConfig.xml

 
  
  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE sqlMapConfig   PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"     
  3.     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">     
  4.     <!-- Ibatis配置文件-->     
  5.     <sqlMapConfig>
  6.            
  7.     <!--   cacheModelsEnabled:是否启动SqlMapClient的缓存机制。    
  8.      enhancementEnabled:是否针对POJO启用字节码增加机制以提升geter/seter的调用效用,  
  9.      为延迟加载带来了及大的性能提升。     
  10.      lazyLoadingEnabled:是否启用延迟加载机制。     
  11.      maxRequests:最大并大请求数。     
  12.      maxSessions:最大Session数,即当前最大允许的开发SqlMapClient数     
  13.      maxTransactions:最大并发事务数。      -->  
  14.    
  15.      <settings     
  16.          cacheModelsEnabled="true"    
  17.          enhancementEnabled="true"    
  18.          lazyLoadingEnabled="true"    
  19.          maxRequests="32"    
  20.          maxSessions="10"    
  21.          maxTransactions="5"    
  22.          useStatementNamespaces="true"    
  23.      /> 
  24.  
  25.      <!--加载SqlMap文件-->     
  26.      <sqlMap resource="emp.xml" />  
  27.    
  28. </sqlMapConfig> 

 

 

配置文件:关于每个实体的映射文件(SQL Mapping文件emp.xml)

 
  
  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"  
  3.     "http://ibatis.apache.org/dtd/sql-map-2.dtd"> 
  4. <sqlMap namespace="EMP"> 
  5.  
  6.     <typeAlias alias="emp" type="com.test.EmpBean" /> 
  7.  
  8.     <select id="getEmp" resultClass="emp"> 
  9.         SELECT * FROM emp  
  10.     </select> 
  11.  
  12. </sqlMap> 

实现EmpDaoImpl :
         继承SqlMapClientDaoSupport类并实现DAO接口。
         调用SqlMapClientTemplate类提供的方法进行数据操作。

 
  
  1. public class EmpDaoImpl extends SqlMapClientDaoSupport implements IEmpDao   
  2. {  
  3.     @SuppressWarnings("unchecked")  
  4.     public List getEmp()  
  5.     {  
  6.         List resultList = new ArrayList();  
  7.         try 
  8.         {  
  9.             resultList= (List)getSqlMapClientTemplate().queryForList("EMP.getEmp"null);  
  10.         }  
  11.         catch(Exception e)  
  12.         {  
  13.             System.out.println("查询错误!");  
  14.         }  
  15.         return resultList;  
  16.     }  
  17.       

iBatis的实现原理:
        iBatis使用简单的XML描述文件,将Java BeanMap和基本数据类型映射成JDBCPreparedStatement的输入参数和ResultSet结果集,实现Sql语句的动态拼接,及ResultSet结果集到Java对象的自动转换。