ibatis学习(三)
Posted onibatis学习(三)---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">
我们的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)
随笔分类
- ")all 生活杂谈(14)
- ")android(18)
- ")apache项目(13)
- ")chart(1)
- ")concurrent(1)
- ")database(34)
- ")dwr(3)
- ")flex(1)
- ")hibernate(23)
- ")java (123)
- ")javafx(1)
- ")java安全(6)
- ")java性能(12)
- ")jbpm(1)
- ")jquery(3)
- ")linux(6)
- ")lucene(1)
- ")lucene(1)
- ")others(2)
- ")questions(7)
- ")questions_hander(5)
- ")spring(24)
- ")struts(8)
- swing
- ")UML(2)
- ")web(33)
- ")webservice(5)
- ")xml(2)
- ")敏捷(6)
- ")方法论(14)
- ")架构(10)
- ")网络通讯(5)
- ")项目管理(17)
相册
搜索
积分与排名
- 积分 - 249820
- 排名 - 69
最新评论
- 1. re: 一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[未登录]
- 受教了。非常感谢。 不过,后面罗列的那么多异常有点不必要了。
- --jake
- 2. re: strtuts2 异常之Could not create and/or set value back on to object [未登录]
- thank you very much!
- --fighting
- 3. re: Android屏幕元素层次结构[未登录]
顶一下
- --黑石
- 4. re: 不同技术团队的配合问题及DevOps(不错的文章,来自infoq)
- 做个记号。
- --何杨
- 5. re: other[未登录]
- 希望学习,谢谢! trust_myself@126.com
- --asa
阅读排行榜
- 1. 一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发(17440)
- 2. 世界上最健康的作息时间表 大家对比下(16717)
- 3. ibatis学习(三)---ibatis与spring的整合(13592)
- 4. 如何用javascript控制checkbox,并进行批量删除(8527)
- 5. ibatis学习(二)--ibatis使用介绍(6368)
评论排行榜
- 1. other(41)
- 2. 一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发(22)
- 3. ssh中利用pager-taglib和filter进行分页(14)
- 4. 团队内是有必要统一IDE(14)
- 5. 世界上最健康的作息时间表 大家对比下(13)