一个. 基本介绍

本文将使用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>

动态更新user

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);
}
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

spring与mybatis集成和事务控制的更多相关文章

  1. spring springMVC mybatis 集成

    最近闲来无事,整理了一下spring springMVC mybatis 集成,关于这个话题在园子里已经有很多人写过了,我主要是想提供一个完整的demo,涵盖crud,事物控制等. 整个demo分三个 ...

  2. spring和mybatis整合进行事务管理

    1.声明式实现事务管理 XML命名空间定义,定义用于事务支持的tx命名空间和AOP支持的aop命名空间: <beans xmlns="http://www.springframewor ...

  3. spring mvc mybatis集成踩的坑

    开园这么多年了也没写几篇文章,现在想想光看别人的也不行啊,咱也自己写写,就写这天我我在做spring mvc与mybatis的集成时遇到的问题 1 spring与mybatis的集成 这个相信大家都弄 ...

  4. Spring的 JDBCTemplate和声明式事务控制

    Spring 中的 JdbcTemplate[会用] JdbcTemplate 概述 它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装.spring 框架为我们提供 ...

  5. spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能

    软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-frame ...

  6. Spring+SpringMVC+MyBatis集成(SSM)

    1.导入需要用到的jar包 <dependencies> <!--Spring核心包--> <dependency> <groupId>org.spri ...

  7. spring+atomikos+mybatis 多数据源事务(动态切换)

    注:自动切换,是为不同的数据源,却要对应相同的dao层: 1.与无事务版的一样,创建DynamicDataSource类,继承AbstractRoutingDataSource package com ...

  8. 阶段3 3.SpringMVC·_07.SSM整合案例_09.ssm整合之Spring整合MyBatis框架配置事务

    spring加入声明式的事物 配置事物 配置事物管理器 需要一个dataSource,引入上面的dataSource 配置事务通知 引入上面的transactionManager事物管理器 find开 ...

  9. Spring+SpringMVC+MyBatis集成学习笔记【一】

    一,首先要清楚,SpringMVC其实就是Spring的一个组件       例如我们知道Spring中有类似于,AOP TX等等类似的组件,所以SpringMVC其实就是Spring的一个组件,是S ...

随机推荐

  1. leetCode Min Stack解决共享

    原标题:https://oj.leetcode.com/problems/min-stack/ Design a stack that supports push, pop, top, and ret ...

  2. JavaScript实现的购物车效果-效果好友列表

    JavaScript实现的购物车效果.当然,可以在许多地方使用这种效果.朋友的.例如,在选择.人力资源模块,工资的计算,人才选拔等..下面来看一下班似有些车效果图: watermark/2/text/ ...

  3. 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...

  4. android 他们定义对话框

    创建一个布局文件 my_dialog.xml <?xml version="1.0" encoding="utf-8"?> <Relative ...

  5. uva10341 - solve it (二分查找)

    题目:uva10341-solve it 题目大意:求解给定的方程式解题思路:由于这个方程式在给定的x的范围内是单调递减的.所以能够用二分查找来尝试x的值.这里的 x是要求保留4小数,所以当区间缩小到 ...

  6. [LeetCode179]Largest Number

    题目: Given a list of non negative integers, arrange them such that they form the largest number. For ...

  7. java 二维码原理以及用java实现的二维码的生成、解码(转)

    http://blog.csdn.net/songylwq/article/details/8643948 http://sjsky.iteye.com/blog/1136934 http://bbs ...

  8. [生产环境数据恢复]innobackupex: fatal error: OR no &#39;datadir&#39; option in group &#39;mysqld&#39; in MySQL options

    1 运行恢复命令  [xxx@xxx-c001db1 tmp]$ time /usr/bin/innobackupex --rsync --user="user" --passwo ...

  9. NGUI 3.5教程(四)Atlas和Sprite(制作图片button)

    Atlas是NGUI的图集.我的理解是:Atlas把你的一些零散的图片,合并成一张图.这样做的优点是,能够减少Draw Call.我不了解它的底层运作机制,我猜应该也是再行进DXT之类的纹理压缩,所以 ...

  10. Windows 8本地化多语言支持

    原文:Windows 8本地化多语言支持 在Win8平台处理本地化多语言的支持相对比较容易的,但比WP8稍微复杂一点,并不像WP8平台那样大部分工作都有VS IDE处理,Win8平台的操作基本需要开发 ...