步骤七:Spring 集成 Ibatis
导入 iBatis相关JAR包:ibatis-2.3.4.726.jar
配置文件: Jdbc 连接的属性文件( jdbc.properties )
- driverClassName=oracle.jdbc.driver.OracleDriver
- url=jdbc:oracle:thin:@localhost:1521:orcl
- username=scott
- password=tiger
配置文件:Spring配置文件(applicationContext.xml)
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
- <bean id="propertyConfigurer"
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>/WEB-INF/jdbc.properties</value>
- </list>
- </property>
- </bean>
- <!-- 配置数据源 -->
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <!--JDBC驱动-->
- <property name="driverClassName" value="${driverClassName}" />
- <!--数据库URL-->
- <property name="url" value="${url}" />
- <!--数据库用户名-->
- <property name="username" value="${username}" />
- <!--数据库密码-->
- <property name="password" value="${password}" />
- </bean>
- <!-- 事务管理器 -->
- <bean id="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
- <!-- 事务代理基类 -->
- <bean id="txProxyTemplate" abstract="true"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager" ref="transactionManager"></property>
- <property name="transactionAttributes">
- <props>
- <prop key="do*">PROPAGATION_REQUIRED,-Exception</prop>
- </props>
- </property>
- </bean>
- <!-- 根据数据访问资源,实例化SqlMapClient对象 -->
- <bean id="baseSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <property name="configLocation" value="/WEB-INF/SqlMapConfig.xml"></property>
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <!-- 创建sqlMapClientTemplate -->
- <bean id="baseSqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
- <constructor-arg>
- <ref bean="baseSqlMapClient" />
- </constructor-arg>
- </bean>
- <!-- 实例化EmpDao,注入sqlMapClientTemplate对象 -->
- <bean id="EmpDao" class="com.test.EmpDaoImpl">
- <property name="sqlMapClientTemplate" ref="baseSqlMapClientTemplate"></property>
- </bean>
- <!-- 实例化EmpService,注入empDao对象 -->
- <bean id="EmpService" parent="txProxyTemplate">
- <property name="target">
- <bean class="com.test.EmpServiceImpl">
- <property name="empDao" ref="EmpDao"></property>
- </bean>
- </property>
- </bean>
- <!-- 实例化emp,注入empService对象 -->
- <bean name="/emp" class="com.test.EmpAction">
- <property name="empService" ref="EmpService"></property>
- </bean>
- </beans>
配置文件:iBaits总配置文件(SqlMapConfig.xml)
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
- <!-- Ibatis配置文件-->
- <sqlMapConfig>
- <!-- cacheModelsEnabled:是否启动SqlMapClient的缓存机制。
- enhancementEnabled:是否针对POJO启用字节码增加机制以提升geter/seter的调用效用,
- 为延迟加载带来了及大的性能提升。
- lazyLoadingEnabled:是否启用延迟加载机制。
- maxRequests:最大并大请求数。
- maxSessions:最大Session数,即当前最大允许的开发SqlMapClient数
- maxTransactions:最大并发事务数。 -->
- <settings
- cacheModelsEnabled="true"
- enhancementEnabled="true"
- lazyLoadingEnabled="true"
- maxRequests="32"
- maxSessions="10"
- maxTransactions="5"
- useStatementNamespaces="true"
- />
- <!--加载SqlMap文件-->
- <sqlMap resource="emp.xml" />
- </sqlMapConfig>
配置文件:关于每个实体的映射文件(SQL Mapping文件emp.xml)
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-2.dtd">
- <sqlMap namespace="EMP">
- <typeAlias alias="emp" type="com.test.EmpBean" />
- <select id="getEmp" resultClass="emp">
- SELECT * FROM emp
- </select>
- </sqlMap>
实现EmpDaoImpl类 :
继承SqlMapClientDaoSupport类并实现DAO接口。
调用SqlMapClientTemplate类提供的方法进行数据操作。
- public class EmpDaoImpl extends SqlMapClientDaoSupport implements IEmpDao
- {
- @SuppressWarnings("unchecked")
- public List getEmp()
- {
- List resultList = new ArrayList();
- try
- {
- resultList= (List)getSqlMapClientTemplate().queryForList("EMP.getEmp", null);
- }
- catch(Exception e)
- {
- System.out.println("查询错误!");
- }
- return resultList;
- }
- }
iBatis的实现原理:
iBatis使用简单的XML描述文件,将Java Bean、Map和基本数据类型映射成JDBC的PreparedStatement的输入参数和ResultSet结果集,实现Sql语句的动态拼接,及ResultSet结果集到Java对象的自动转换。
转载于:https://blog.51cto.com/375940084/823385