Spring整合Ibatis之SqlMapClientDaoSupport
前言 HibernateDaoSupport SqlMapClientDaoSupport 。
其实就作用而言两者是一样的,都是为提供DAO支持,为访问数据库提供支持。
只不过HibernateDaoSupport是Spring对Hibernate的支持,而SqlMapClientDaoSupport是Spring对ibatis的支持。Hibernate是一个全自动化的ORM框架,而Ibatis是一种半自动化的ORM框架。Hibernate的全自动化在于已经帮助用户实现了基本的数据库操作,但ibatis则要求用户自己去写Sql语句去实现与数据库的交互操作。
所以说就本质来说两种的作用是一样的。
Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建,继而整合iBatis和Spring。
- <!-- 配置事务特性 -->
- <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>
这些事务都是声明在业务逻辑层的对象上的。 第二,我们需要一个事务管理器,对事务进行管理,实现整合iBatis和Spring的第二步。
- <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对象,实现整合iBatis和Spring的第三步
- <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配置,这是整合iBatis和Spring的最后一步了
- <bean id="userDAO" class="com.ibatils.dao.impl.ibatis.UserDAOImpl">
- <property name=”sqlMapClient” ref=”sqlMapClient”/>
- </bean>
这就是所有需要注意的问题了,此后就可以在业务逻辑层调用DAO对象了!
Spring整合Ibatis之SqlMapClientDaoSupport的更多相关文章
- Spring整合Ibatis
Spring整合Ibatis javaibatisspring 所需jar清单 ibatis-2.*.jar *为任意版本,下同,ibatis工作包 sp ...
- Spring 整合 ibatis
是的,真的是那个不好用的ibatis,不是好用的mybatis. 由于工作需要用到ibatis需要自己搭建环境,遇到了不少的坑,做一下记录. 一.环境配置 Maven JDK1.6 (非常重要,使用S ...
- Spring2.5整合Ibatis入门级开发实例
分类: SPRING IBATIS2010-11-22 20:19 1170人阅读 评论(0) 收藏 举报 ibatisspringstringpropertiesclassuser 最近一直在看 ...
- Ibatis,Spring整合(注解方式注入)
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- spring+struts2+ibatis 框架整合以及解析
一. spring+struts2+ibatis 框架 搭建教程 参考:http://biancheng.dnbcw.net/linux/394565.html 二.分层 1.dao: 数据访问层(增 ...
- spring+springmvc+ibatis整合注解方式实例【转】
源自-----> http://shaohan126448.iteye.com/blog/2033563 (1)web.xml文件(Tomcat使用) 服务器根据配置内容初始化spring框架, ...
- spring+springmvc+ibatis整合注解方式实例
需求说明 实现用户通过数据库验证登录需求.採用 Myeclipse+Tomcat 6.0+Mysql 5.0+JDK 1.6 2.数据库表 开发所用是Mysql数据库,仅仅建立单张用户表T_USER, ...
- Intellij IDEA +MAVEN+Jetty实现Spring整合Mybatis
1 pom.xml(这里出现transaction错误,是版本的问题) <project xmlns="http://maven.apache.org/POM/4.0.0" ...
- Spring整合MyBatis
前言:MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用 ...
随机推荐
- Nginx高级特性实操
导读 nginx从入门到精通,点我直达 下载nginx与安装 点我直达 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl opens ...
- Matlab 中 arburg 函数的理解与实际使用方法
1. 理解 1.1 Matlab 帮助: a = arburg(x,p)返回与输入数组x的p阶模型相对应的归一化自回归(AR)参数. 如果x是一个向量,则输出数组a是一个行向量. 如果x是矩阵,则参数 ...
- vivo 全球商城:商品系统架构设计与实践
一.前言 随着用户量级的快速增长,vivo官方商城v1.0的单体架构逐渐暴露出弊端:模块愈发臃肿.开发效率低下.性能出现瓶颈.系统维护困难. 从2017年开始启动的v2.0架构升级,基于业务模块进行垂 ...
- nose在python2与python3中的包的自动发现用例的区别
最近在使用python3,同样装了nose,发现自动发现用例总是有问题,如下面的代码结婚 testcase |------ __init__.py |------ test_bb.py test_bb ...
- C++ substr 的两个用法
substr是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度. basic_string substr(size_type _Off = 0,size_type _C ...
- scrapy获取汽车之家数据
1.创建scrapy项目 >scrapy startproject scrapy_carhome 2.找到对应接口 3.创建爬虫文件 > cd scrapy_carhome\scrapy_ ...
- Java 如何对文件进行多个Object对象流的读写操作
思路:把已经序列化的对象存入容器(如LinkedList<?>)中,然后用ObjectInputStream和ObjectOutputStream对这个实例化的LinkedList< ...
- [atARC115F]Migration
称$k$个物品的位置$(a_{1},a_{2},...,a_{k})$为一个状态,并设初始状态为$S$,结束状态为$T$ 定义状态的比较:首先根据$\sum_{i=1}^{k}h_{a_{i}}$,即 ...
- [atAGC048F]01 Record
先将这个序列翻转,贪心找到最长的'101010--'的形式的子序列并删除,重复此过程并记这些字符串长度依次为$l_{1},l_{2},...,l_{n}$,若最终还有字符剩余则一定无解 假设$S$中元 ...
- [loj3313]序列
定义$C_{i}$表示令$i,i+1,i+2,...$的位置减1的操作,定义$I_{i}$表示令$i,i+2,i+4,...$的位置减1的操作 结论1:一定存在一种最优解使得$\forall i$不同 ...