Ibatis,Spring整合(注解方式注入)
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" 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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- 自动扫描Bean -->
<context:component-scan base-package="com.tq365"/>
<!-- 强制使用CGLIB代理 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!-- DataSource数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/ibatisorm</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<!-- Spring iBatis SqlMapClient -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="WEB-INF/sqlmap-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!--事务管理DataSourceTransactionManager-->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--启动spring注解功能-->
<tx:annotation-driven transaction-manager="txManager"/>
<aop:config>
<aop:pointcut id="baseServiceMethods" expression="execution(* com.tq365.samples.ibatis.dao.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="baseServiceMethods"/>
</aop:config>
<aop:aspectj-autoproxy />
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="select*" read-only="true" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<tx:method name="update*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<!--
<tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
-->
<tx:method name="delete*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
</tx:attributes>
</tx:advice>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" 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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- 自动扫描Bean -->
<context:component-scan base-package="com.tq365"/>
<!-- 强制使用CGLIB代理 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!-- DataSource数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/ibatisorm</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<!-- Spring iBatis SqlMapClient -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="WEB-INF/sqlmap-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!--事务管理DataSourceTransactionManager-->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--启动spring注解功能-->
<tx:annotation-driven transaction-manager="txManager"/>
<aop:config>
<aop:pointcut id="baseServiceMethods" expression="execution(* com.tq365.samples.ibatis.dao.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="baseServiceMethods"/>
</aop:config>
<aop:aspectj-autoproxy />
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="select*" read-only="true" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<tx:method name="update*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<!--
<tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
-->
<tx:method name="delete*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
</tx:attributes>
</tx:advice>
</beans>
<?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>
<sqlMap resource="com/tq365/sqlMap/User.xml"/>
</sqlMapConfig>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<sqlMap resource="com/tq365/sqlMap/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">
<typeAlias alias="User" type="com.tq365.samples.ibatis.model.User"/>
<resultMap id="UserResult" class="User">
<result property="id" column="id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
<result property="userpwd" column="userpwd"/>
</resultMap>
<insert id="addUser">
insert user(
username,
userpwd,
address
)
values(
#username#,
#userpwd#,
#address#
)
</insert>
<select id="findUser" resultMap="UserResult">
select * from user WHERE username=#username# and userpwd=#userpwd#
</select>
<select id="findUserById" resultMap="UserResult">
select * from user WHERE id=#id#
</select>
<!-- User表内记录总条数 -->
<select id="getTotalCount" resultClass="int">
select count(*) from user
</select>
<select id="findAllPageUser" resultMap="UserResult">
select * from user limit #start#,5
</select>
</sqlMap>
<!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.tq365.samples.ibatis.model.User"/>
<resultMap id="UserResult" class="User">
<result property="id" column="id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
<result property="userpwd" column="userpwd"/>
</resultMap>
<insert id="addUser">
insert user(
username,
userpwd,
address
)
values(
#username#,
#userpwd#,
#address#
)
</insert>
<select id="findUser" resultMap="UserResult">
select * from user WHERE username=#username# and userpwd=#userpwd#
</select>
<select id="findUserById" resultMap="UserResult">
select * from user WHERE id=#id#
</select>
<!-- User表内记录总条数 -->
<select id="getTotalCount" resultClass="int">
select count(*) from user
</select>
<select id="findAllPageUser" resultMap="UserResult">
select * from user limit #start#,5
</select>
</sqlMap>
UserDAO.java接口
package com.tq365.samples.ibatis.dao;
import org.springframework.stereotype.Repository;
import com.tq365.samples.ibatis.model.User;
import com.tq365.sqmples.util.Pages;
/**
* UserDAO 接口
*/
@Repository
publicinterface UserDAO {
/**
* 通过ID查询
* @param id
* @return
*/
public User findUserById(int id);
/**
* 通过ID删除
* @param id
*/
publicvoid deleteUserById(int id);
publicvoid addUser(User user);
/**
* 查询指定的User对象
* @param user
* @return
*/
public User findUser(User user);
/**
* 通过用户名分页查询
* @param username
* @return
*/
public Pages<User> findUsersByUsername(String username,int pageNo);
/**
* 所有User对象分页
* @param pageNo
* @return
*/
public Pages<User> findAllPageUser(int pageNo);
}
import org.springframework.stereotype.Repository;
import com.tq365.samples.ibatis.model.User;
import com.tq365.sqmples.util.Pages;
/**
* UserDAO 接口
*/
@Repository
publicinterface UserDAO {
/**
* 通过ID查询
* @param id
* @return
*/
public User findUserById(int id);
/**
* 通过ID删除
* @param id
*/
publicvoid deleteUserById(int id);
publicvoid addUser(User user);
/**
* 查询指定的User对象
* @param user
* @return
*/
public User findUser(User user);
/**
* 通过用户名分页查询
* @param username
* @return
*/
public Pages<User> findUsersByUsername(String username,int pageNo);
/**
* 所有User对象分页
* @param pageNo
* @return
*/
public Pages<User> findAllPageUser(int pageNo);
}
BaseDao.java
package com.tq365.samples.ibatis.dao;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.ibatis.sqlmap.client.SqlMapClient;
/**
* BaseDao,Dao需继承此Dao
* @author archie2010
* since 2011-3-3 下午02:52:36
*/
publicclass BaseDao extends SqlMapClientDaoSupport{
@Resource(name ="sqlMapClient")
private SqlMapClient sqlMapClient;
@PostConstruct
publicvoid initSqlMapClient(){
super.setSqlMapClient(sqlMapClient);
}
}
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.ibatis.sqlmap.client.SqlMapClient;
/**
* BaseDao,Dao需继承此Dao
* @author archie2010
* since 2011-3-3 下午02:52:36
*/
publicclass BaseDao extends SqlMapClientDaoSupport{
@Resource(name ="sqlMapClient")
private SqlMapClient sqlMapClient;
@PostConstruct
publicvoid initSqlMapClient(){
super.setSqlMapClient(sqlMapClient);
}
}
@PostConstruct注解
在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并 装配Bean的属性(依赖注入))。它的一个典型的应用场景是,当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的 setter方法时
package com.tq365.samples.ibatis.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.tq365.samples.ibatis.model.User;
import com.tq365.sqmples.util.Pages;
/**
* UserDAO接口实现类
* @author archie2010
* since 2011-3-3 下午02:54:57
*/
@Component("userDAO")
publicclass UserDAOimpl extends BaseDao implements UserDAO{
public User findUserById(int id){
return (User) getSqlMapClientTemplate().queryForObject("findUserById", id);
}
/**
* 添加User
*/
publicvoid addUser(User user) {
getSqlMapClientTemplate().insert("addUser", user);
}
/**
* 删除User
*/
publicvoid deleteUserById(int id) {
getSqlMapClientTemplate().delete("deleteUserById", id);
}
/**
* 查找User
*/
public User findUser(User user) {
return (User) getSqlMapClientTemplate().queryForObject("findUser", user);
}
publicint getTotalCountByUsername(String username){
return (Integer) getSqlMapClientTemplate().queryForObject("getTotalCountByUsername", username);
}
/**
* User分页
*/
@SuppressWarnings("unchecked")
public Pages<User> findUsersByUsername(String username,int pageNo) {
Pages<User> pages=new Pages<User>(getTotalCountByUsername(username));
pages.setPageSize(5);
List<User> userList=new ArrayList<User>();
Map<String, Object> map=new HashMap<String, Object>();
map.put("username", username);
map.put("start", pages.getStart(pageNo));
userList=(List<User>) getSqlMapClientTemplate().queryForObject("findUsersByUsername", map);
pages.setPageList(userList);
return pages;
}
/**
* 查询所有记录
* @return
*/
publicint getTotalCount(){
return (Integer) getSqlMapClientTemplate().queryForObject("getTotalCount");
}
@SuppressWarnings("unchecked")
public Pages<User> findAllPageUser(int pageNo){
Pages<User> pages=new Pages<User>(getTotalCount());
pages.setPageSize(5);
List<User> userList=new ArrayList<User>();
userList=(List<User>) getSqlMapClientTemplate().queryForList("findAllPageUser", pages.getStart(pageNo));
pages.setPageList(userList);
return pages;
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.tq365.samples.ibatis.model.User;
import com.tq365.sqmples.util.Pages;
/**
* UserDAO接口实现类
* @author archie2010
* since 2011-3-3 下午02:54:57
*/
@Component("userDAO")
publicclass UserDAOimpl extends BaseDao implements UserDAO{
public User findUserById(int id){
return (User) getSqlMapClientTemplate().queryForObject("findUserById", id);
}
/**
* 添加User
*/
publicvoid addUser(User user) {
getSqlMapClientTemplate().insert("addUser", user);
}
/**
* 删除User
*/
publicvoid deleteUserById(int id) {
getSqlMapClientTemplate().delete("deleteUserById", id);
}
/**
* 查找User
*/
public User findUser(User user) {
return (User) getSqlMapClientTemplate().queryForObject("findUser", user);
}
publicint getTotalCountByUsername(String username){
return (Integer) getSqlMapClientTemplate().queryForObject("getTotalCountByUsername", username);
}
/**
* User分页
*/
@SuppressWarnings("unchecked")
public Pages<User> findUsersByUsername(String username,int pageNo) {
Pages<User> pages=new Pages<User>(getTotalCountByUsername(username));
pages.setPageSize(5);
List<User> userList=new ArrayList<User>();
Map<String, Object> map=new HashMap<String, Object>();
map.put("username", username);
map.put("start", pages.getStart(pageNo));
userList=(List<User>) getSqlMapClientTemplate().queryForObject("findUsersByUsername", map);
pages.setPageList(userList);
return pages;
}
/**
* 查询所有记录
* @return
*/
publicint getTotalCount(){
return (Integer) getSqlMapClientTemplate().queryForObject("getTotalCount");
}
@SuppressWarnings("unchecked")
public Pages<User> findAllPageUser(int pageNo){
Pages<User> pages=new Pages<User>(getTotalCount());
pages.setPageSize(5);
List<User> userList=new ArrayList<User>();
userList=(List<User>) getSqlMapClientTemplate().queryForList("findAllPageUser", pages.getStart(pageNo));
pages.setPageList(userList);
return pages;
}
}
相关推荐
### Spring与iBatis集成开发详解 #### 一、引言 在Java企业级应用开发领域,Spring框架因其强大的依赖注入(DI)和面向切面编程(AOP)能力而备受青睐;而iBatis(现称为MyBatis)则以其简洁的SQL映射功能而闻名。...
Spring 和 iBatis 是两个非常重要的 Java 开发框架,它们分别在依赖注入和数据库操作方面发挥着关键作用。Spring 是一个全面的企业级应用框架,提供了众多功能,包括但不限于:依赖注入、面向切面编程(AOP)、事务...
Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等特性,而iBatis则是一个优秀的持久层框架,它将SQL语句与Java代码分离,使得数据库操作更加灵活和易于维护。将两者整合可以实现松...
在整合 iBATIS 时,Spring 会负责创建 SqlSessionFactory 和 SqlSession 的实例,并通过配置文件或注解来注入到需要的地方。 2. **SqlSessionFactory**:这是 iBATIS 提供的工厂类,用于创建 SqlSession 对象。...
在本示例中,我们将探讨如何在Spring框架中集成iBATIS,并且将这个集成应用部署到WebSphere 5.1服务器上,并提供一个基于Web服务的接口。首先,我们需要理解Spring和iBATIS的基本概念。 Spring是一个开源的Java企业...
Spring整合iBatis是将流行的Java持久层框架iBatis与Spring框架集成,以实现更高效、更灵活的数据库操作。这种整合使得开发者可以利用Spring的依赖注入(DI)和管理事务的能力,同时享受iBatis提供的SQL映射功能。在...
这个集成将Spring的依赖注入特性和iBatis的SQL映射功能相结合,提供了高效且灵活的数据操作方式。让我们深入探讨一下这个主题。 首先,Spring是一个全面的企业级应用框架,它简化了开发过程,通过提供依赖注入(DI...
在IT行业中,集成Spring、Struts和iBatis与MySQL是构建企业级Java Web应用程序的常见选择。这个项目集成了Spring 2.5.5、Struts 2.1.6、iBatis 2.3.4以及MySQL 5.1数据库,使用IntelliJ IDEA 9作为开发环境。下面将...
Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)等功能,而iBATIS则是一个持久层框架,用于简化数据库操作。本示例代码旨在展示如何将两者有效地结合在一起,以实现高效的数据访问层。 首先...
本教程将深入探讨如何将Spring、Ibatis框架与MySQL集群集成,以实现高效、可靠的数据库操作。 首先,让我们了解Spring和Ibatis。Spring是一个全面的Java应用开发框架,它提供了依赖注入、面向切面编程、事务管理等...
Spring 3.0 和 iBatis 的集成是一个常见的企业级应用开发模式,它结合了Spring的强大依赖注入(DI)和面向切面编程(AOP)能力与iBatis灵活的SQL映射机制,实现了业务逻辑层与数据访问层的分离,提高了代码的可维护...
Struts2.1.8、Spring2.5.6 和 iBatis2.3 的集成是Web开发中一种常见的技术组合,主要用于构建企业级的Java应用程序。这些框架各自都有其独特的优势,当它们协同工作时,可以提供强大的功能,如模型-视图-控制器(MVC...
Ibatis与Spring框架集成后,可以使用Spring的DI功能管理数据库连接,同时通过MyBatis-Spring提供的MapperScannerConfigurer自动扫描并注册Mapper接口,实现DAO层的便捷开发。 在SpringMVC+Spring+Ibatis的架构中,...
Struts2、Spring和iBatis是三种广泛应用于Java企业级开发的开源框架,它们各自在不同的领域提供了强大的功能,并且可以很好地集成在一起,形成一套完整的MVC(模型-视图-控制器)架构。 Struts2是基于MVC设计模式的...
Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...
**Spring集成iBatis详解** 在Java开发中,Spring框架以其强大的依赖注入和面向切面编程能力被广泛应用,而iBatis作为一个轻量级的持久层框架,它将SQL语句与Java代码分离,提供了更灵活的数据访问方式。将Spring与...
6. **集成测试**:编写测试用例来确保Spring和iBatis的整合工作正常。使用如JUnit和Mockito这样的工具进行单元测试,确保每个组件都能正确工作。 在提供的文件名`web_6.zip`和`web_7.zip`中,我们可以推测这些可能...
**Spring** 是一个全面的后端开发框架,提供依赖注入(DI)和面向切面编程(AOP)等特性,同时也支持事务管理、数据访问集成等功能。在本示例中,Spring 可能的角色有: 1. 依赖注入:管理对象之间的关系,降低耦合...