首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring 与 ibatis 调整

2012-11-12 
Spring 与 ibatis 整合??? ?我们要知道Spring和ibatis都是无侵入性和低耦合性的框架,所以,我们是可以单独

Spring 与 ibatis 整合

?

?? ?我们要知道Spring和ibatis都是无侵入性和低耦合性的框架,所以,我们是可以单独的进行开发,也就是可以不需要进行整合也可以开发。如果我们要在ibatis中使用Spring的IOC容器的注入和AOP来管理事务的话,将两个框架进行整合起来开发是我们一个很好的选择,但决不是唯一选择,我曾经就没有整合两个框架就做过项目。下面我将简单介绍一个如何整合?希望大家能明白。

????? 1. 准备jar包,我主要用了一下jar包:

????????????? aspectjrt.jar、aspectjweaver.jar、commons-dbcp.jar、commons-logging.jar、commons-pool.jar、

????????????? log4j-1.2.14.jar、spring.jar、ibatis-2.3.0.677.jar、数据库JDBC驱动

????? 2. 写JavaBean实体(User.java)、映射文件(User.xml)和ibatis配置文件(sql-map-config.xml)
????? User.java
??????
????? public class User{
??????? private String user_id;
??????? private String user_name;
?????? .......
????? }
??????
????? User.xml
?? ?

?

 <sqlMap namespace="Users">        <typeAlias alias="UserInfoPO" type="po.User" />           <!-- 得到用户信息 -->        <select id="getUsersById" parametername="code">      <sqlMapConfig>      <sqlMap resource="xsql/Users.xml"/> </sqlMapConfig>
?

?

????? 3. 衔接IBatis配置和DAO实现

???? package dao.impl.ibatis;
???? import java.sql.SQLException;
???? import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
???? import po.UserInfoPO;
???? import dao.UserDao;
???? public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao{
?????? //根据用户id得到用户信息
?????? public UserInfoPO getUsersById? (String user_id) throws SQLException {
??????? return (UserInfoPO)getSqlMapClientTemplate().queryForObject("getUsersById", user_id);
?????? }
???? }
?????
???? 上述代码中出现了Spring提供的IBatis DAO支持类和获取SqlMapClientTemplate的父类模板方法。这个UserDao是我建的一个接口。

?? 4.关键整合点:Spring配置文件(applicationContext-ibatis.xml)
?????
???? applicationContext-ibatis.xml
?? ??

?

<!-- 相关数据源 -->    <bean id="dataSource"     />      <property name="url" value="${jdbc.url}" />      <property name="username" value="orcl" />      <property name="password" value="lzp" />      <!-- 这里可以使用属性文件,大家可以参考sprig提供的宠物店的列子 -->    </bean>    <!-- Spring提供的iBatis的SqlMap配置-->    <bean id="sqlMapClient"     value="WEB-INF/sql-map-config.xml" />      <property name="dataSource" ref="dataSource" />    </bean>   <!-- 添加声明式事务管理 -->    <!-- 事务管理的定义 -->    <bean id="transactionManager"     ref="dataSource" />    </bean>   <bean id="baseTransactionProxy"     ref="transactionManager" />       <property name="transactionAttributes">        <props>  <!--  事务传播特性 -->         <prop key="insert*">PROPAGATION_REQUIRED</prop>         <prop key="update*">PROPAGATION_REQUIRED</prop>         <prop key="modify*">PROPAGATION_REQUIRED</prop>         <prop key="*">readOnly</prop>        </props>       </property>    </bean>   <!-- 定义业务对象,注入dao -->    <bean id="userService" parent="baseTransactionProxy">     <property name="target">      <bean ref="userDao" />      </bean>     </property>    </bean>    <!-- DAO定义-->    <bean id="userDao" ref="sqlMapClient" />     <property name="dataSource" ref="dataSource" />       </bean>
?

?

?至此就基本完成了Spring IoC和IBatis的整合了.如有问题,可以去看Spring提供的官方文档和例子。上面我们谈到事务传播特性,我就简单的介绍一下事务的几个传播特性:

?1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启
?2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
?3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
?4. PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
?5. PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
?6. PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常
?7. PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务,则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

?

热点排行