`
lzth
  • 浏览: 142769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ibatis学习(三)---ibatis与spring的整合

 
阅读更多
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-Struts-IBatis-AOP-Transaction

    Struts 2 与 Spring 的整合提供了更强大的功能,例如利用 Spring 的 DI 来管理 Struts 2 的动作类,以及事务管理。 **IBatis 框架** IBatis 是一个持久层框架,它将 SQL 查询与 Java 代码分离,允许开发者编写 SQL...

    mybaits-spring(ibatis-spring)-1.0.2-bundle

    《MyBatis-Spring整合详解及1.0.2版本剖析》 MyBatis-Spring是MyBatis和Spring框架的集成库,旨在简化在Spring应用中使用MyBatis的过程,实现两者的无缝连接。本篇文章将深入探讨MyBatis-Spring的核心功能,以及...

    ibatis与spring整合

    ### ibatis与Spring框架整合详解 #### 一、ibatis简介 ibatis是一个开源的、基于Java的持久层框架,它提供了SQL映射的方式来进行数据库访问。与Hibernate等其他ORM框架相比,ibatis更加轻量级,对于那些只需要简单...

    spring ibatis整合所需jar包

    Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等特性,而iBatis则是一个优秀的持久层框架,它将SQL语句与Java代码分离,使得数据库操作更加灵活和易于维护。将两者整合可以实现松...

    spring3.2与Ibatis整合

    Spring 3.2 与 iBatis 的整合是Java企业级开发中常见的一种技术组合,它结合了Spring的依赖注入和事务管理能力以及iBatis的SQL映射框架的灵活性。这种整合允许开发者将业务逻辑与数据访问层解耦,提高了代码的可维护...

    iBatis和Spring整合

    iBatis和Spring整合 iBatis和Spring整合

    spring与ibatis整合集成实例

    以上就是 Spring 与 iBATIS 整合集成的主要步骤和知识点。通过这样的集成,可以利用 Spring 的强大功能管理和协调整个应用程序,同时利用 iBATIS 的灵活性处理数据库操作,实现高效的企业级应用开发。在实际项目中,...

    jbpm4.4 ibatis-spring 整合

    jbpm4.4 ibatis-spring 整合

    spring_ibatis整合案例

    在IT行业中,Spring框架与iBatis(现为MyBatis)的整合是常见的数据访问层解决方案,尤其在企业级应用开发中极为普遍。Spring是一个全面的Java应用程序框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-...

    ibatis-spring学习

    在iBatis-Spring整合中,Spring可以管理SqlSessionFactory和SqlSessionTemplate,这样我们无需手动创建和关闭SqlSession,降低了资源泄露的风险。同时,Spring的事务管理功能可确保数据操作的原子性和一致性。 整合...

    Spring+iBatis整合详解

    ### Spring与iBatis整合详解 #### 一、前言 在Java企业级应用开发中,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力深受开发者喜爱,而iBatis(现更名为MyBatis)作为一款优秀的持久层框架,通过...

    ibatis spring struts 整合案例

    在这个特定的案例中,我们关注的是"Ibatis Spring Struts"的整合。这三个框架分别是:Ibatis(一个轻量级的持久层框架),Spring(一个全面的企业级应用开发框架),以及Struts(一个用于构建MVC(Model-View-...

    spring3 ibatis整合实例

    这个项目实例对于初学者来说是一份宝贵的资源,通过实际操作,可以更好地理解和掌握Spring3与iBatis的整合应用。记得仔细阅读项目文档,理解每一个配置和代码的作用,这将对你的编程技能提升大有裨益。

    spring-ibatis简单集成

    在IT行业中,Spring框架与iBatis的集成是常见的数据访问解决方案,特别是在Java Web开发中。...通过上述步骤,开发者可以快速地在项目中实现Spring与iBatis的整合,从而更好地管理和控制数据库操作。

    ibatis的3个jar包.rar

    在使用Ibatis时,开发者可以根据项目的规模和需求选择不同的集成方式,如Spring框架中的Ibatis整合,实现更高级的事务管理和依赖注入。 总的来说,这三者构成了Ibatis的基本运行环境,对于理解Ibatis的工作原理和...

    spring-ibatis

    spring-ibatis 整合 springmvc 配置: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc=...

    Spring对IBatis的整合

    #### 一、Spring与IBatis整合概述 Spring框架与IBatis(现称为MyBatis)的整合为开发者提供了一种更简洁、更强大的数据库访问方式。Spring通过其内置的支持机制极大地简化了原有的IBatis访问代码,并且提供了与...

    ibatis 与spring3整合

    "Ibatis 与 Spring3 整合"这一主题,涉及到的是两个知名Java框架——Ibatis(一个轻量级的持久层框架)和Spring(一个全面的企业级应用框架)的协同工作。下面我们将深入探讨这一整合过程中的关键知识点。 Ibatis ...

    Spring整合iBatis

    **Spring整合iBatis详解** 在Java开发领域,Spring框架以其强大的依赖注入和面向切面编程能力被广泛应用,而iBatis作为一个轻量级的持久层框架,以其灵活的SQL映射机制受到开发者喜爱。将两者整合,可以充分利用...

    spring和ibatis整合

    在整合iBatis时,Spring会管理SqlSessionFactory和SqlSessionTemplate,这些都是与数据库交互的关键组件。 2. **配置文件**:在整合过程中,需要创建XML配置文件,如`sqlMapConfig.xml`来配置iBatis的基本设置,...

Global site tag (gtag.js) - Google Analytics