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>
动态更新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集成和事务控制的更多相关文章
- spring springMVC mybatis 集成
最近闲来无事,整理了一下spring springMVC mybatis 集成,关于这个话题在园子里已经有很多人写过了,我主要是想提供一个完整的demo,涵盖crud,事物控制等. 整个demo分三个 ...
- spring和mybatis整合进行事务管理
1.声明式实现事务管理 XML命名空间定义,定义用于事务支持的tx命名空间和AOP支持的aop命名空间: <beans xmlns="http://www.springframewor ...
- spring mvc mybatis集成踩的坑
开园这么多年了也没写几篇文章,现在想想光看别人的也不行啊,咱也自己写写,就写这天我我在做spring mvc与mybatis的集成时遇到的问题 1 spring与mybatis的集成 这个相信大家都弄 ...
- Spring的 JDBCTemplate和声明式事务控制
Spring 中的 JdbcTemplate[会用] JdbcTemplate 概述 它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装.spring 框架为我们提供 ...
- spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能
软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-frame ...
- Spring+SpringMVC+MyBatis集成(SSM)
1.导入需要用到的jar包 <dependencies> <!--Spring核心包--> <dependency> <groupId>org.spri ...
- spring+atomikos+mybatis 多数据源事务(动态切换)
注:自动切换,是为不同的数据源,却要对应相同的dao层: 1.与无事务版的一样,创建DynamicDataSource类,继承AbstractRoutingDataSource package com ...
- 阶段3 3.SpringMVC·_07.SSM整合案例_09.ssm整合之Spring整合MyBatis框架配置事务
spring加入声明式的事物 配置事物 配置事物管理器 需要一个dataSource,引入上面的dataSource 配置事务通知 引入上面的transactionManager事物管理器 find开 ...
- Spring+SpringMVC+MyBatis集成学习笔记【一】
一,首先要清楚,SpringMVC其实就是Spring的一个组件 例如我们知道Spring中有类似于,AOP TX等等类似的组件,所以SpringMVC其实就是Spring的一个组件,是S ...
随机推荐
- 直接插入排序、折半插入排序、Shell排序、冒泡排序,选择排序
一.直接插入排序 稳定,时间复杂度:最好O(n).最差O(n^2).平均O(n^2).空间复杂度O(1) void InsertSort(int L[], int n) { int i, j,key; ...
- jQuery插件之-瀑布流插件
jquery.wookmark.js 一个实现瀑布流自适应宽度布局的jQuery插件—jquery.wookmark.js , wookmark使用非常简单到只需要一句代码就能实现,除此之外,当页面宽 ...
- Access之C#连接Access
原文:Access之C#连接Access 如果是个人用的小程序的话.一般都推荐用Sqlite和Access 使用SQlite数据库需要安装SQLite驱动,详情:SQLite之C#连接SQLite 同 ...
- swift 学习资源 大集合
今天看到一个swift学习网站,其中我们收集了大量的学习资源 Swift 介绍 Swift 介绍 来自 Apple 官方 Swift 简单介绍 (@peng_gong) 一篇不错的中文简单介绍 [译] ...
- 【小白的java成长系列】——顶级类Object源代码分析
首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是非常喜爱的~ java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetw ...
- 悼念传奇,约翰询问·纳什和他的妻子艾丽西亚致敬,创建一个传奇,爱数学
约翰·阅读·纳什的传记.我渴望录制通道 我一直相信数字,无论逻辑方程使我们认为.但这种追求一生的后,我问自己:"这是什么逻辑?谁决定的理由?"我的探索让我从物理到形而上,最后到了妄 ...
- [Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果
原文:[Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果 [前言] 使用经纬度来定位地图的位置,以及使用 MapAnimationKind 属性来设定地图缩放时的 ...
- Lua语言在Wireshark中使用(转)
1. 检查Wireshark的版本是否支持Lua 打开Wireshark,点击“HelpàAbout Wireshark”菜单,查看弹出的对话框,如果有“with Lua 5.1”表示支持 ...
- Blend4精选案例图解教程(三):一键拖拽
原文:Blend4精选案例图解教程(三):一键拖拽 拖拽效果,常规实现方法是定义MoveLeftDwon.MoveLeftUp.MouseMove事件,在Blend的世界里,实现对象的拖拽,可以不写一 ...
- IE7,8,9兼容性处理
在IE7根据假设高度文本框中设置,则光标将不会被中心的方法如以下: 添加属性,如:style="line-height:32px\9";能够 假设一个页面有多个TAB交换的物品.而 ...