`

spring整合ibatis事务管理

 
阅读更多

转自:http://www.cnblogs.com/standcloud/articles/2602099.html

Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建。

 

与hibernate类似,Spring 提供了SqlMapClientDaoSupport对象,我们的DAO可以继承这个类,通过它所提供的SqlMapClientTemplate对象来操纵数据库。看起来这些概念都与hibernate类似。

 

通过SqlMapClientTemplate来操纵数据库的CRUD是没有问题的,这里面关键的问题是事务处理。Spring提供了强大的声明式事务处理的功能,我们已经清楚hibernate中如何配置声明式的事务,那么在iBATIS中如何获得声明式事务的能力呢?

 

第一,我们需要了解的是spring通过AOP来拦截方法的调用,从而在这些方法上面添加声明式事务处理的能力。典型配置如下:applicationContext-common.xml

 

<!-- 配置事务特性 -->  
 
<tx:advice id="txAdvice" transaction-manager="事务管理器名称">  
  
    <tx:attributes>  
  
       <tx:method name="add*" propagation="REQUIRED"/>  
  
       <tx:method name="del*" propagation="REQUIRED"/>  
 
       <tx:method name="update*" propagation="REQUIRED"/>  
  
       <tx:method name="*" read-only="true"/>  
  
   </tx:attributes>  
  
</tx:advice>  
  
  
  
<!-- 配置哪些类的方法需要进行事务管理 -->  
  
<aop:config>  
  
   <aop:pointcut id="allManagerMethod" expression="execution(* com.ibatis.manager.*.*(..))"/>  
  
  <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>  
  
</aop:config>  

 

 

这些事务都是声明在业务逻辑层的对象上的。

 

第二,我们需要一个事务管理器,对事务进行管理。

     <bean id="txManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  
         <property name="dataSource" ref="dataSource"/>  
  
    </bean>  
 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
  
        <property name="url" value="jdbc:mysql://127.0.0.1/ibatis"/>  
  
        <property name="username" value="root"/>  
  
        <property name="password" value="mysql"/>  
  
   </bean>  

 

此后,我们需要让spring来管理SqlMapClient对象:

 

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  
       <property name="configLocation"><value>classpath:sqlMapConfig.xml</value></property>  
  
</bean> 

 我们的sqlMapConfig.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 lazyLoadingEnabled="true" useStatementNamespaces="true" />  
  
        <!-- 使用spring之后,数据源的配置移植到了spring上,所以iBATIS本身的配置可以取消 -->  
  
    <sqlMap resource="com/ibatis/dao/impl/ibatis/User.xml"/>  
  
</sqlMapConfig>  

 User.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="User">  
  
 <!-- Use type aliases to avoid typing the full classname every time. -->  
  
 <typeAlias alias="User" type="com.ibatis.User"/>  
  
 <!-- Select with no parameters using the result map for Account class. -->  
  
 <select id="selectAllUsers" resultClass="User">  
  
    select * from t_user  
  
 </select>  
  
   
  
 <select id="selectUser" resultClass="User" parameterClass="int">  
  
  select * from t_user where id=#id#  
  
 </select>  
  
   
  
 <insert id="insertUser" parameterClass="User">  
  
  insert into t_user values (  
  
       null,#username#,#password#  
  
  )  
  
 </insert>  
  
   
  
 <update id="updateUser" parameterClass="User">  
  
  update t_user set username = #username#,password=#password#  
  
  where id=#id#  
  
  </update>  
  
   
  
 <delete id="deleteUser" parameterClass="int">  
  
  delete from t_user where id=#id#  
  
 </delete>  
  
</sqlMap> 

 我们的DAO的编写:

 

package com.iabtis.dao.impl.ibatis;  
  
import java.util.List;  
  
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
  
import com.ibatis.dao.UserDAO;  
  
import com.ibatis.crm.model.User;  
  
public class UserDAOImpl extends SqlMapClientDaoSupport implements UserDAO {  
  
    public void select(User user) {  
  
              getSqlMapClientTemplate().delete("selectUser ",user.getId());  
  
       }  
  
   public List findAll() {  
  
              return getSqlMapClientTemplate().queryForList("selectAllUsers ");  
  
       }  
  
       public void delete(User user) {  
  
              getSqlMapClientTemplate().delete("deleteUser ",user.getId());  
  
       }  
  
       public void save(User user) {  
  
              getSqlMapClientTemplate().insert("insertUser ",user);  
  
       }  

       public void update(User user) {  
  
              getSqlMapClientTemplate().update("updateUser ",user);  
  
       }  
  
}  

 继承SqlMapClientDaoSupport,要求我们注入SqlMapClient对象,因此,需要有如下的DAO配置:

 

<bean id="userDAO" class="com.ibatils.dao.impl.ibatis.UserDAOImpl">  
  
     <property name=”sqlMapClient” ref=”sqlMapClient”/>  
  
</bean>  

 这就是所有需要注意的问题了,此后就可以在业务逻辑层调用DAO对象了!

 

分享到:
评论

相关推荐

    Spring+ibatis 保留ibatis事务的配置

    SPRING与IBATIS整合采用保留IBATIS事务,可自己控制回滚!

    SPRING IBATIS 保留IBATIS事务的配置方式

    SPRING与IBATIS整合采用保留IBATIS事务,可自己控制回滚!

    struts2+spring+ibatis学生管理demo

    struts2整合spring、ibatis学生信息管理系统。事务管理、分页处理

    Spring 2.5整合iBATIS 2.3并使用Spring的声明式事务管理

    NULL 博文链接:https://ymgjava.iteye.com/blog/1117624

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成 ,一朵多 插入1万条数据,不到2秒,备注不包含类库

    struts2、spring、ibatis整合

    为了开发方便,打算换一个架构,自己整合了s2sibatis框架,采用spring事务管理数据库,喜欢的可以看看,有什么问题请多多指教!

    springmvc整合ibatis

    springmvc整合ibatis示例。增加了事务管理,连接池使用c3p0

    Struts2.0+Springframework2.5+ibatis2.3完美整合用户登录及增删改查

    本演示示例主要使用目前最新,最流行技术Struts2.1 +Spring 2.5.1+ibatis2.3整合开发而成,这与我以前发布的版本中最大特色是整合了Spring2.5.1中的注解功能和半自动化工具ibatis技术,这是本示例的两大特色,简化了配置...

    Ibatis_Spring_Demo

    这个Project是关于ibatis 和 spring 框架整合的Demo。 需要向大家说明一下几个需要注意的地方: ...2.ibatis和spring的整合主要是spring的配置文件需要配置ibatis的相关配置,如:数据库连接及事务管理等。

    Struts2+Ibatis+Spring3.0完整项目(直接运行)

    耗时3天,对Struts2+Ibatis+Spring3.0+JreeChart进行了完整整合 包括Spring3.0的事务配置 OSCache二级缓存的配置 log4j实现输出Sql到控制台 JfreeChart与Struts2,Spring3.0的整合 对一个简单的表实现查询,批量删除...

    跟我学spring3(8-13)

    【第八章】 对ORM的支持 之 8.3 集成iBATIS ——跟我学spring3 【第八章】 对ORM的支持 之 8.4 集成JPA ——跟我学spring3 【第九章】 Spring的事务 之 9.1 数据库事务概述 ——跟我学spring3 【第九章】 Spring的...

    跟我学spring3(8-13).pdf

    对ORM的支持 之 8.1 概述 8.2 集成Hibernate3 8.3 集成iBATIS 8.4 集成JPA 9.1 数据库事务概述 9.2 事务管理器 9.3 编程式事务 9.4 声明式事务 10.1 概述 10.2 集成Struts1.x 10.3 集成Struts2.x 10.4 集成JSF 11.1 ...

    spring4.3.2参考文档(英文)

    通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。 Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常...

    spring jar 包详解

    使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。 (4) spring-context.jar 这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ...

    spring in action英文版

     4.4 用Spring整合Hibernate  4.4.1 Hibernate概览  4.4.2 管理Hibernate资源  4.4.3 用HibernateTemplate访问Hibernate  4.4.4 HibernateDaoSupport的子类  4.5 Spring和JDO  4.5.1 配置JDO ...

    spring4.3.9相关jar包

    spring-orm.jar:整合第三方的orm实现,如hibernate,ibatis,jdo以及spring 的jpa实现 spring-oxm.jar:Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换 spring-messaging.jar: spring-test.jar:对...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...

    spring 3.0 jar 所有开发包及开发项目实例

    org.springframework.transaction-3.0.0.M4.jar: 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理 org.springframework.web.servlet-3.0.0.M4.jar: SpringMVC org.springframework.jms-3.0.0.M4...

    Spring 2.0 开发参考手册

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. ...

    spring-framework-3.0.0.M4-with-docs

    org.springframework.transaction-3.0.0.M4.jar: 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理 org.springframework.web.servlet-3.0.0.M4.jar: SpringMVC org.springframework.jms-3.0.0.M4...

Global site tag (gtag.js) - Google Analytics