原文出处:
袁鸣凯
一、前言
上次讲了Struts结合Spring并使用Spring的JdbcTemplate来搭建工程框架后我们面临着jar库无法管理,工程发布不方便,jar包在工程内太占空间,jar包冲突,管理,甚至漏包都问题。于是我们在讲“万能框架spring(二)”前,传授了一篇番外篇,即讲利用maven来管理我们的jar库。
从今天开始我们将结合“万能框架spring(一)”与番外篇maven来更进一步丰富我们的ssx框架,那么今天讲的是使用iBatis3结合SS来构建我们的ssi框架,我们把这个框架命名为beta吧。
二、SSI框架
还记得我们在第十八天中讲到的我们的框架的架构图吗?上面这张是我们今天的架构图,除了Struts,Spring层,我们需要变换的是DAO层即把原来的SQL这部分换成iBatis,我们在次使用的是iBatis版本3。
由于我们在第十八天中已经说了这样的一个框架的好处其中就有:
层中相关技术的替换不影响到其它层面
所以对于我们来说我们需要改动的代码只有datasource.xml与dao层的2个接口两个类,那我们就一起来看看这个基于全注解的SSi框架是怎么样搭起来的吧。
三、搭建SSI框架
3.1建立工程
我们还是使用maven来建立我们的工程
建完后照着翻外篇《第十九天》中的“四、如何让Maven构建的工程在eclipse里跑起来”对工程进行设置。
3.2 增加iBatis3的jar相关包
打开pom.xml
第一步
找到“slf4j”,将它在pom中的描述改成如下内容:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.10</version> </dependency>
第二步
增加两个jar包
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.10</version> </dependency> <dependency> <groupId>org.apache.ibatis</groupId> <artifactId>ibatis-core</artifactId> <version>3.0</version> </dependency>
3.3 开始配置ibatis与spring结合
打开/src/main/resources/spring/datasource下的datasource.xml,增加如下几行
<bean id="iBatisSessionFactory" class="org.sky.ssi.ibatis.IBatis3SQLSessionFactoryBean" scope="singleton"> <property name="configLocation" value="sqlmap.xml"></property> <property name="dataSource" ref="dataSource"></property> </bean> <bean id="iBatisDAOSupport" class="org.sky.ssi.ibatis.IBatisDAOSupport"> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
此处,我们需要4个类,它们是:
org.sky.ssi.ibatis.IBatis3SQLSessionFactoryBean类
package org.sky.ssi.ibatis; import java.io.IOException; import java.io.Reader; import javax.sql.DataSource; import org.apache.ibatis.builder.xml.XMLConfigBuilder; import org.apache.ibatis.io.Resources; import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; /** * * IBatis3SQLSessionFactoryBean is responsible for integrating iBatis 3 <p> * with spring 3. Since all environment configurations have been moved to <p> * spring, this class takes the responsibility to get environment information<p> * from spring configuration to generate SqlSessionFactory. * @author lifetragedy *