一个. 基本介绍

本文将使用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. 查看文章strncpy()功能更好的文章

    strncpy()功能 原型:extern char *strncpy(char *dest, char *src, int n);    使用方法:#include <string.h> ...

  2. 第3周 区_SQL Server中管理空间的基本单位

    原文:第3周 区_SQL Server中管理空间的基本单位 哇哦,SQL Server性能调优培训已经进入第3周了!同时你已经对SQL Server内核运行机制有了很好的认识.今天我会讲下SQL Se ...

  3. Cocos2d-x3.0 lua捆绑C++分类

    我知道这个纪录Lua结合整个过程. 原文地址:http://blog.csdn.net/qqmcy/article/details/26099859 准备工作: 1.创一个一个Lua的2dxproje ...

  4. List Set Map用法和区别

    List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是.如图: Collection ├List │├LinkedList │├ArrayList │└Vec ...

  5. hibernate的通配符比拼接sql到底好在哪?

    Hibernate对于刚接触的人来说,通配符只是提供了另一种组合sql的方式.接触的久了,熟悉之后,才能够真正理解通配符在Hibernate中起到的作用 主要作用有两点: 1,避免sql注入 hibe ...

  6. $POST 、$HTTP_RAW_POST_DATA、php://input三者之间的差别

    $POST .$HTTP_RAW_POST_DATA.php://input三者之间的差别 总是产生变量包括有原始的 POST 数据.否则,此变量仅在碰到未识别 MIME 类型的数据时产生.只是,訪问 ...

  7. android_定义多个Activity及跳转

    说明:在Android应用程序其中创建多个activity,而且启动一个activity的方法,以及activity之间的跳转. 样例:在MainActivity里面加入一个button,触动butt ...

  8. Oracle的海量存储技术

    下午去參加一个Oracle有关海量数据存储技术的培训讲座了. 地址在广州市林和西路101号天河区计经大楼西側三楼. 培训发起机构为:广州中睿信息技术有限公司. 以下就简要总结一下所听到的一些东西,也算 ...

  9. mysqlbackup 还原特定的表

    mysqlbackup使用TTS恢复指定表. ************************************************************* 4.恢复特定表 ******* ...

  10. System.Threading.ThreadStateException

    异常:"System.Threading.ThreadStateException"在未处理的异常类型 System.Windows.Forms.dll 发生 其它信息: 在能够调 ...