ibatis学习(三)

Posted on

ibatis学习(三)---ibatis与spring的整合 - joe --专注java,开源,架构,项目管理 - BlogJava

joe --专注java,开源,架构,项目管理

STANDING ON THE SHOULDERS OF GIANTS

posts - 339, comments - 292, trackbacks - 0, articles - 1 BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合 :: 管理 ## ibatis学习(三)---ibatis与spring的整合

Posted on 2007-12-07 18:26 @joe 阅读(13593) 评论(11) 编辑 收藏

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>

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

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

<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">

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">
insert into t_user values ( null,/#username/#,/#password/# ) update t_user set username = /#username/#,password=/#password/# where id=/#id/# delete from t_user where id=/#id/#

我们的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配置:

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

评论

/# re: ibatis学习(三)---ibatis与spring的整合 回复 更多评论

2007-12-08 09:42 by laocat

豁然开朗 !!

/# re: ibatis学习(三)---ibatis与spring的整合 回复 更多评论

2008-03-24 16:08 by 屹砾

整合的问题现在终于清楚了, 对于advice和aop还有点不清楚。

/# re: ibatis学习(三)---ibatis与spring的整合[未登录] 回复 更多评论

2008-06-13 17:26 by 冷漠大神o.../)

真是不错的文章啊 如果在在可以把源码提供下载 那就更完美了 :-) 呵呵 是不是有点贪心

/# re: ibatis学习(三)---ibatis与spring的整合[未登录] 回复 更多评论

2008-06-13 17:34 by 冷漠大神o.../)

有没有代码下载啊?

/# re: ibatis学习(三)---ibatis与spring的整合 回复 更多评论

2008-08-25 11:35 by 379548695qq

UserDAO类里面的内容是什么?

/# re: ibatis学习(三)---ibatis与spring的整合[未登录] 回复 更多评论

2009-03-19 10:17 by 虫子

正在烦恼中,google到了你的方案!呵呵

/# re: ibatis学习(三)---ibatis与spring的整合 回复 更多评论

2009-08-13 16:32 by jadmin

很好,学习了

/# re: ibatis学习(三)---ibatis与spring的整合 回复 更多评论

2009-08-15 23:15 by 匹马单枪

好帖, 学习了!

/# re: ibatis学习(三)---ibatis与spring的整合 回复 更多评论

2009-09-01 13:07 by 2

为什么我的出错了

/# re: ibatis学习(三)---ibatis与spring的整合[未登录] 回复 更多评论

2010-04-28 11:10 by test

autocommit 如果不设置为false, 事务有用么

/# re: ibatis学习(三)---ibatis与spring的整合 回复 更多评论

2010-11-01 13:42 by rr

sqlMapClient里应该注入dataSource

新用户注册 刷新评论列表
找优秀程序员,就在博客园 IT新闻: · 婚恋网世纪佳缘乱象重生 成一夜情猎场 · 帝国时代 Online 已发布,可免费下载 · 小米发布会中的亮点与尿点:“狗日的 1999” · 315投诉网疑被关后改名重开张 新网站否认 · 团购网站融资冷却裁员求生 行业洗牌危机并存 博客园 博问 IT新闻 Java程序员招聘 标题 请输入标题 姓名 请输入你的姓名 主页 请输入验证码 验证码 /* 内容(请不要发表任何与政治相关的内容) 请输入评论内容 Remember Me? 登录 [使用Ctrl+Enter键可以直接提交] 推荐职位: · 广州ASP.NET程序员(广州丹霄信息技术) · 上海 .NET软件工程师(上海苏秦网络) · 上海.NET软件开发工程师(东方财富信息) · 北京 SQL数据库开发工程师(圣特尔科技) · 北京高新诚聘 ASP.NET 程序员(盈科融通软件) · 北京 .NET软件工程师(北京科胜永昌) · 北京.NET 研发工程师 (北京捷报数据) · 北京C/#开发工程师 B/S方向(圣特尔科技)

博客园首页随笔: · C/#设计模式——命令模式(Command Pattern) · 老系统维护 · 使用单例模式实现自己的HttpClient工具类 · Spread for Windows Forms高级主题(2)---理解单元格类型 · ERP/MIS开发 菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源) 知识库: · IT项目管理的六种错误思维 · 我的10个开发原则 · 大数据下的数据分析平台架构 · 为什么编程是独一无二的职业 · 分享8年开发经验,浅谈个人发展经历,明确自己发展方向 最简洁阅读版式: ibatis学习(三)---ibatis与spring的整合 网站导航:

博客园 IT新闻 知识库 博客生活 IT博客网 C++博客 博问 管理 Powered by: BlogJava Copyright © @joe

公告

老婆的淘宝,欢迎选购

留言簿(2)

随笔分类

相册

搜索

积分与排名

  • 积分 - 249820
  • 排名 - 69

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
转载请注明作者(RobinChia)和出处 It so life ,请勿用于任何商业用途
本文链接: ibatis学习(三)