spring与mybatis整合及事务控制

一. 简介

本文将会使用spring整合mybatis, 并添加事务管理, 以此为记, 方便以后查阅。

二. 例子

1. 代码结构图:

2. 建表语句:

DROP DATABASE test;
CREATE DATABASE test;  

USE test;  

CREATE TABLE USER(
  id VARCHAR(36) PRIMARY KEY,
  username VARCHAR(64),
  address VARCHAR(128)
)  

INSERT INTO USER (id, username, address) VALUES("001", "zhangsan", "Wuhan");
INSERT INTO USER (id, username, address) VALUES("002", "lisi", "Shanghai");   

3. 实体类:

public class User {

	private String id;

	private String uname;

	private String address;

	@Override
	public String toString() {
		return "id: " + id + ", uname: " + uname + ", address: " + address;
	}
}

// 省略getter与setter方法

4. 实体映射配置:user.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zdp.domain.User">

	<resultMap type="User" id="userBean">
		<id column="id" property="id"/>
		<result column="username" property="uname"/>
		<result column="address" property="address"/>
	</resultMap>

	<select id="selectUserById" parameterType="string" resultMap="userBean">
		select * from user where id = #{id}
	</select>

	<update id="updateUserByCondition" parameterType="User">
		update user
		<set>
			<if test="uname != null">
				username = #{uname} ,
			</if>
			<if test="address != null">
				address = #{address}
			</if>
		</set>
		where id = #{id}
	</update>

</mapper>

5. service接口:

public interface UserService {
	void updateUser(User user);
}

6. service实现:

public class UserServiceImpl implements UserService {

	private UserDao userDao;

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	@Override
	public void updateUser(User user) {
		userDao.updateUser(user);
		System.out.println(1/0); // 运行时异常
	}
}

7. dao接口:

public interface UserDao {
	User findUserById(String id);
	void updateUser(User user);
}

8. dao实现:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

	@Override
	public User findUserById(String id) {
		SqlSession sqlSession = super.getSqlSession();
		User user = (User) sqlSession.selectOne(User.class.getName() + ".selectUserById", id);
		return user;
	}

	@Override
	public void updateUser(User user) {
		super.getSqlSession().update(User.class.getName() + ".updateUserByCondition", user);
	}
}

9. mybatis总配置:sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias type="com.zdp.domain.User" alias="User"/>
	</typeAliases>
	<mappers>
		<!-- 映射文件的位置  -->
		<mapper resource="com/zdp/domain/User.xml" />
	</mappers>
</configuration>

10. spring配置: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: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-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

	<!-- 配置数据源 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql:///test"/>
		<property name="username" value="root"/>
		<property name="password" value="root"/>

		<!-- 请测试另一种 配置数据库连接方式 -->
	</bean>

	<!-- session工厂 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />

		<!-- mybatis总配置文件的位置 -->
		<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
	</bean>

	<!-- 配置事务管理 -->
	<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>

	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
	    <tx:attributes>
	        <tx:method name="delete*" propagation="REQUIRED" />
	        <tx:method name="save*" propagation="REQUIRED" />
	        <tx:method name="update*" propagation="REQUIRED" />
	        <tx:method name="find*" read-only="true" />
	        <tx:method name="get*" read-only="true" />
	        <tx:method name="select*" read-only="true" />
	    </tx:attributes>
	</tx:advice>  

	<aop:config>
	    <!-- 第一个"*"代表所有类, 第二个"*"代表所有方法, ".."代表任意参数 -->
	    <aop:pointcut id="pointcut" expression="execution(* com.zdp.service.*.*(..))" />  

	    <!-- 把事务控制在service层 -->
	    <aop:advisor pointcut-ref="pointcut" advice-ref="transactionAdvice" />
	</aop:config> 

	<!-- 业务处理 -->
	<bean id="userDao" class="com.zdp.dao.impl.UserDaoImpl">
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

	<bean id="userService" class="com.zdp.service.impl.UserServiceImpl">
		<property name="userDao" ref="userDao"/>
	</bean>
</beans>

11. junit测试:

public class SpringTest {
	private ApplicationContext context;

	@Before
	public void sprintInit() {
		context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
	}

	@Test
	public void testFindUserById() {
		UserDao userDao = (UserDao) context.getBean("userDao");
		User user = userDao.findUserById("001");
		System.out.println(user);
	}	

	@Test
	public void testUpdateUser() {
		UserService userService = (UserService) context.getBean("userService");
		User user = new User();
		user.setId("001");
		user.setUname("zhangsan1");
		userService.updateUser(user);
	}
}
时间: 2024-08-29 05:47:02

spring与mybatis整合及事务控制的相关文章

spring与mybatis集成和事务控制

一个. 基本介绍 本文将使用spring整合mybatis, 并加入事务管理, 以此为记, 方便以后查阅. 二. 样例 1. 代码结构图: 2. 建表语句: DROP DATABASE test; CREATE DATABASE test; USE test; CREATE TABLE USER( id VARCHAR(36) PRIMARY KEY, username VARCHAR(64), address VARCHAR(128) ) INSERT INTO USER (id, usern

spring mvc+mybatis整合

(1) 导入相关包,包结构如下图所示: (2) 修改src/applicationContext.xml文件,结果如下所示: [java] view plaincopy <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org

spring mvc + mybatis 整合框架

首先放几个该放的包(注意:后面两个mybatis-spring-1.1.1.jar mybatis-3.1.1.jar是因为不导入这两个包sql就不会在控制台打印,感觉调试的时候有点不方便,不需要的话就没什么) 下面还有几个包是用来使用json的,就可以直接返回字符串在网页上,如果不导入直接访问方法的话,会返回一个字符串名的jsp 文件目录如下: 接下来就是几个配置文件 applicationContext-dao.xml <beans xmlns="http://www.springfr

ssm之spring+springmvc+mybatis整合初探

1.基本目录如下  2.首先是向lib中加入相应的jar包  3.然后在web.xml中加入配置,使spring和springmvc配置文件起作用. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/

Springmvc+spring+maven+Mybatis整合

随着springmvc及maven越来越受到众多开发者的青睐,笔者主要结合springmvc+maven+spring+Mybatis,搭建一套用于开发和学习的框架.本文将一步步展示整个框架的搭建过程,方便交流和学习. 一.开发环境: windows 8.1 eclipse Luna Service Release 1 (4.4.1) mysql-5.6.19-winx64 maven-3.2.3 jdk 1.7 apache-tomcat-7.0.57 二.主要技术: springmvc +

Spring+SpringMVC +MyBatis整合配置文件案例66666

Spring+SpringMVC +MyBatis整合配置文件案例 标签: springspringmvcmybatismvcjava 2017-04-13 19:12 228人阅读 评论(1) 收藏 举报 分类: java_javaSE(2) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Spring+SpringMVC +MyBatis整合配置文件案例 针对spring/SpringMVC/MyBatis三个框架的整合有很多的方式,经过最近的学习我来总结一下其配置文

Mybatis学习--spring和Mybatis整合

简介 在前面写测试代码的时候,不管是基于原始dao还是Mapper接口开发都有许多的重复代码,将spring和mybatis整合可以减少这个重复代码,通过spring的模板方法模式,将这些重复的代码进行封装,如:获取SqlSessionFactory.SqlSession.SqlSession的关闭等,我们只需要实现具体的业务处理.另外,spring还利用其IOC将Dao或者Mapper接口的放入到容器中进行管理,更好的实现了解耦. Spring和MyBatis整合 1.整合思路: 需要spri

九 spring和mybatis整合

1       spring和mybatis整合 1.1     整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spring和mybatis整合自动完成) 持久层的mapper都需要由spring进行管理. 1.2     整合环境 创建一个新的java工程(接近实际开发的工程结构) jar包: mybatis3.2.7的jar包 spring3.2.

Spring与Mybatis整合

1.mybatis-spring.jar简介 Spring与Mybatis整合需要引入一个mybatis-spring.jar文件包,该整合包由Mybatis提供,可以从Mybatis官网下载. mybatis-spring.jar提供了下面几个与整合相关的API SqlSessionFactoryBean 为整合应用提供SqlSession对象资源 MapperFactoryBean 根据指定Mapper接口生成Bean实例 MapperScannerConfigurer 根据指定包批量扫描M