`

ibatis2与Spring2.5集成

 
阅读更多

代码即王道。集成方式有三种,详见JUnit4.x测试类的注释。。

首先是用到的实体类User.java

package com.jadyer.model;

import java.util.Date;

public class User {
	private Integer id;
	private String name;
	private Date birth;
	
	/*--三个属性的setter和getter略--*/
	
	public User(){}
	
	public User(Integer id, String name, Date birth){
		this.id = id;
		this.name = name;
		this.birth = birth;
	}
}

相应的实体类映射文件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">
	<typeAlias alias="user" type="com.jadyer.model.User"/>
	
	<insert id="insertUser" parameterClass="user">
		insert into T_USER(id, name, birth) values(#id#, #name#, #birth#)
	</insert>
</sqlMap>

下面是位于CLASSPATH中的ibatis2.x的全局配置文件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>

	<!-- 使用spring之后,数据源的配置移植到了spring上,所以iBATIS本身的配置可以取消 -->
	
	<sqlMap resource="com/jadyer/model/User.xml" />
</sqlMapConfig>

下面是位于CLASSPATH中的Spring2.5的全局配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
	http://www.springframework.org/schema/tx   
	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
		<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:jadyer"/>
		<property name="username" value="scott"/>
		<property name="password" value="jadyer"/>
	</bean>
	
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation" value="classpath:SqlMapConfig.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	<bean id="userDao" class="com.jadyer.dao.ibatis.UserDaoIbatis">
		<property name="sqlMapClient" ref="sqlMapClient" />
	</bean>
	
	<!-- 声明一个事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- 声明一个已被纳入事务管理的DAO接口实现类的代理类 -->
	<bean id="userDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager" ref="transactionManager" />
		<property name="target" ref="userDao" />
		<property name="transactionAttributes">
			<props>
				<prop key="insert*">PROPAGATION_REQUIRED</prop>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
	</bean>
</beans>

用到的操纵数据库表的接口UserDao.java

package com.jadyer.dao;

import java.util.List;

import com.jadyer.model.User;

public interface UserDao {
	public void insertUser(User user);
	
	/**
	 * 批量更新
	 */
	public void batchInsertUser(final List<User> userList, final String statement);
}

然后是该接口的实现类UserDaoIbatis.java


package com.jadyer.dao.ibatis;

import java.sql.SQLException;
import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.SqlMapClientCallback;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.ibatis.sqlmap.client.SqlMapExecutor;
import com.jadyer.dao.UserDao;
import com.jadyer.model.User;

/**
 * SqlMapClientDaoSupport是Spring面向ibatis2.x的辅助类,它负责调度DataSource
 * SqlMapClientTemplate对传统SqlMapClient调用模式进行了封装,简化了上层访问代码
 * SqlMapClientTemplate能够完成ibatis操作,而DAO则通过对此类进行扩展获得上述功能
 */
public class UserDaoIbatis extends SqlMapClientDaoSupport implements UserDao {
	public void insertUser(User user) {
		getSqlMapClientTemplate().insert("insertUser", user);
	}
	
	public void batchInsertUser(final List<User> userList, final String statement) throws DataAccessException {
		getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
			public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
				executor.startBatch();
				int batch = 0;
				for(User user : userList){
					executor.update(statement, user);
					batch++;
					if(200 == batch){ //每200条批量提交一次
						executor.executeBatch();
						batch = 0;
					}
				}
				executor.executeBatch();
				return null;
            }
        });
    }
}

接着是使用了JUnit4.x的单元测试类IbatisSpringTest.java

package com.jadyer.test;

import java.io.FileNotFoundException;
import java.sql.Date;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.jadyer.dao.UserDao;
import com.jadyer.model.User;

/**
 * Ibatis2.x与Spring的三种集成方式
 * @see ----------------------------------------------------------------------------------------------------------
 * @see 第一种:将sqlMapClient注入给继承了SqlMapClientDaoSupport类的DAO接口实现类
 * @see        示例代码,请见本例。并且此时不需要在DAO接口实现类中添加setSqlMapClient()方法
 * @see        优点是可以直接使用Spring封装后的getSqlMapClientTemplate,缺点是不便于移植
 * @see ----------------------------------------------------------------------------------------------------------
 * @see 第二种:将sqlMapClient注入给未继承任何类的DAO接口实现类
 * @see        此时需要在DAO接口实现类中增加setSqlMapClient(SqlMapClient sqlMapClient)方法
 * @see        然后我们就可以基于原生的iBATIS API来编程,而无需对Spring产生任何依赖
 * @see ----------------------------------------------------------------------------------------------------------
 * @see 第三种:将sqlMapClientTemplate注入给DAO接口实现类
 * @see        此时需要在DAO接口实现类中增加setSqlMapClientTemplate(SqlMapClientTemplate sqlMapClientTemplate)方法
 * @see        <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
 * @see        		<property name="sqlMapClient" ref="sqlMapClient" />
 * @see        </bean>
 * @see        <bean id="userDao" class="com.jadyer.dao.ibatis.UserDaoIbatis">
 * @see        		<property name="sqlMapClientTemplate" ref="sqlMapClientTemplate" />
 * @see        </bean>
 * @see ----------------------------------------------------------------------------------------------------------
 */
public class IbatisSpringTest {
	@Test
	public void insert() throws FileNotFoundException{
		ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
//		UserDao userDao = (UserDao)factory.getBean("userDaoProxy"); //加入事务控制
		UserDao userDao = (UserDao)factory.getBean("userDao");      //未加事务控制
		User user = new User(22, "张起灵", Date.valueOf("2011-03-26"));
		userDao.insertUser(user);
	}
}

最后是用到的数据库脚本文件

-- Oracle 11g

-- Create table
create table t_user(
  id    number,
  name  varchar2(10),
  birth date
);


分享到:
评论

相关推荐

    spring2.5 mvc_ibatis2

    《Spring 2.5 MVC与iBatis 2整合详解》 在Web开发领域,Spring框架以其强大的功能和灵活性备受开发者喜爱。Spring 2.5版本是Spring发展史上的一个重要里程碑,它引入了许多新特性,使得开发更加高效。同时,iBatis...

    struts2_spring2.5_ibatis2.3_mysql架构

    *架构struts2_spring2.5_ibatis2.3 *mysql5.0 *jdk 1.6 *带有所有jar包,可直接运行 本实例实现了用户登陆,用户信息CRUD相关操作。让你感受到了ibatis做o/r mapping的方便快捷。 下次集成dwr进来 create ...

    Structs2.0+Spring2.5+Ibatis整合例子

    本项目"Structs2.0+Spring2.5+Ibatis整合例子"就是这样一个示例,展示了如何将Struts2、Spring和iBatis这三个流行的技术栈整合在一起,以实现MVC(模型-视图-控制器)架构。以下将详细阐述这三个框架的核心功能以及...

    spring mvc+ibatis+spring2.5注解

    通过 MyBatis-Spring 桥接器,iBatis 可以无缝集成到 Spring 框架中,支持事务管理和服务定位。 Spring 2.5 版本引入了更丰富的注解支持,简化了配置文件,降低了依赖注入(DI)的复杂性。比如,@Autowired 注解...

    spring 2.5依赖包

    3. **工具支持**:Spring 2.5集成了IDE工具,如Eclipse和IntelliJ IDEA,提供了更友好的开发环境。 4. **性能优化**:Spring 2.5对框架性能进行了优化,提高了初始化速度和运行效率。 综上所述,"spring 2.5依赖包...

    spring2.5中文文档

    6. **JSR-250注解支持**:Spring 2.5集成了JSR-250规范,如`@PostConstruct`和`@PreDestroy`,使得初始化和销毁方法的声明变得更加简单。 7. **MVC框架增强**:Spring MVC在2.5版本中也得到了改进,支持RESTful风格...

    struts2 + spring2.5 + ibatis2.3.4整合包文件

    这个"struts2 + spring2.5 + ibatis2.3.4整合包文件"包含了这三个框架的集成,用于搭建一个完整的Java Web应用程序。以下是对这些框架及其整合的详细说明: 1. Struts2:Struts2是基于Apache Struts 1的升级版,它...

    struts2+spring2.5+ibatis

    Struts2、Spring2.5和iBatis是经典的Java Web开发框架组合,它们共同构建了一个灵活、高效的企业级应用程序架构。在这个组合中,Struts2作为MVC(Model-View-Controller)框架负责处理用户请求,Spring2.5则提供依赖...

    struts2_spring2.5_ibatis开发指南

    `spring2.5参考手册.pdf` 和 `spring2轻量级j2ee开发框架原理与实践.pdf` 提供了关于Spring核心组件、IoC容器、AOP、事务管理等全面的指导,有助于开发者充分利用Spring来构建松耦合、可维护的应用程序。 **iBATIS*...

    Ext2.0+struts2+spring2.5+ibatis2

    在IT领域,构建高效、可扩展的企业级应用是至关重要的,而"Ext2.0+Struts2+Spring2.5+Ibatis2"的组合就是一种常见的技术栈,用于实现这样的目标。这个技术组合提供了从用户界面到数据访问的全方位解决方案。 **Ext...

    SSI2 Struts2+Spring2.5+IBatis2 配置

    Struts2、Spring2.5 和 iBatis2 是经典的Java Web开发框架组合,它们各自在应用程序的不同层面提供了强大的功能。下面将详细讲解这三大框架的集成配置以及log4j的相关知识。 首先,Struts2 是一个基于MVC(Model-...

    Ibatis+Spring2.5+Structs2.0整合的一个小例子

    在这个"Ibatis+Spring2.5+Structs2.0整合的一个小例子"中,我们将探讨如何将这三种技术集成到一个应用中,以实现数据的增、删、查功能。Ibatis、Spring和Structs是Java开发中常用的三个框架,它们各自在不同的层面上...

    Ibatis2.3+Struts1.3+Spring2.5 整合实例代码

    本示例代码涉及的是一个经典的技术栈:Ibatis2.3、Struts1.3和Spring2.5的整合。这三个框架各自都有其独特的功能和优点,组合在一起能够提供灵活的数据访问、高效的MVC架构以及全面的应用管理。 Ibatis,作为一款轻...

    spring 2.5

    在Spring 2.5中,可以方便地集成iBATIS,实现持久层的灵活管理。iBATIS允许开发者编写SQL语句并将其与Java代码结合,提高了数据库操作的效率和灵活性。 总结起来,Spring 2.5的关键知识点包括: 1. 注解驱动的依赖...

    struts2+ibatis+spring2.5

    SSI整合,即Struts2、Spring和iBatis的集成,为开发者提供了一个强大的、灵活的和可扩展的开发环境。下面我们将深入探讨这三个框架的核心功能、整合过程以及如何在实际项目中利用它们实现log4j日志记录和文件上传...

    Spring2.5中文手册

    这个`Spring2.5中文手册`是一个非常有价值的参考资料,帮助开发者深入理解并有效地利用Spring框架。 1. **Spring概述** - Spring是一个开源的Java平台,它提供了全面的应用程序架构支持,简化了Java Enterprise ...

    整合struts2+spring2.5+ibatis

    同时,需要配置Struts2与Spring的集成,例如通过`StrutsSpringObjectFactory`让Struts2能够使用Spring管理的Bean。 3. **配置iBatis**:配置`SqlMapConfig.xml`,包含数据库连接信息和SQL映射文件的路径。在Spring...

    struts2+ibatis-2.3+spring2.5整合实例

    在"Struts2+ibatis-2.3+spring2.5整合实例"中,我们首先需要设置项目的环境,包括JDK、Maven或Gradle等构建工具,以及Tomcat服务器。然后,创建一个新的Maven或Gradle项目,并在`pom.xml`或`build.gradle`文件中添加...

    spring2.5 ibatis2.3 struts2.1 dwr3 annotation集成配置

    综上所述,"spring2.5 ibatis2.3 struts2.1 dwr3 annotation集成配置"涉及到的不仅仅是单一技术的使用,更是Java Web开发中多框架协同工作的典范,展示了如何利用注解简化配置,提高开发效率,并为大型企业级应用...

    struts2_spring2.5_ibatis2.3.4框架搭配

    在Struts2_spring2.5的集成中,Spring可以作为IoC容器,负责初始化和管理应用中的bean,包括Struts2的动作类(Action)。此外,Spring 2.5 还提供了事务管理、安全控制和数据访问支持。 iBatis 2.3.4 是一款持久层...

Global site tag (gtag.js) - Google Analytics