spring与mybatis整合及事务控制

来源:互联网 发布:2016中国人口迁移数据 编辑:程序博客网 时间:2024/05/21 22:16

一. 简介

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


二. 例子

1. 代码结构图:



2. 建表语句:

[sql] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. DROP DATABASE test;  
  2. CREATE DATABASE test;    
  3.     
  4. USE test;    
  5.     
  6. CREATE TABLE USER(    
  7.   id VARCHAR(36) PRIMARY KEY,    
  8.   username VARCHAR(64),    
  9.   address VARCHAR(128)     
  10. )    
  11.     
  12. INSERT INTO USER (id, username, address) VALUES("001""zhangsan""Wuhan");    
  13. INSERT INTO USER (id, username, address) VALUES("002""lisi""Shanghai");     


3. 实体类:

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public class User {  
  2.   
  3.     private String id;  
  4.   
  5.     private String uname;  
  6.   
  7.     private String address;  
  8.   
  9.     @Override  
  10.     public String toString() {  
  11.         return "id: " + id + ", uname: " + uname + ", address: " + address;  
  12.     }  
  13. }  
// 省略getter与setter方法


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

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper  
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5. <mapper namespace="com.zdp.domain.User">  
  6.   
  7.     <resultMap type="User" id="userBean">  
  8.         <id column="id" property="id"/>  
  9.         <result column="username" property="uname"/>  
  10.         <result column="address" property="address"/>  
  11.     </resultMap>  
  12.   
  13.     <select id="selectUserById" parameterType="string" resultMap="userBean">  
  14.         select * from user where id = #{id}  
  15.     </select>  
  16.       
  17.     <update id="updateUserByCondition" parameterType="User">  
  18.         update user  
  19.         <set>  
  20.             <if test="uname != null">  
  21.                 username = #{uname} ,  
  22.             </if>  
  23.             <if test="address != null">  
  24.                 address = #{address}  
  25.             </if>  
  26.         </set>  
  27.         where id = #{id}  
  28.     </update>  
  29.   
  30. </mapper>  

动态更新user


5. service接口:

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public interface UserService {  
  2.     void updateUser(User user);  
  3. }  

6. service实现:

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public class UserServiceImpl implements UserService {  
  2.   
  3.     private UserDao userDao;  
  4.       
  5.     public void setUserDao(UserDao userDao) {  
  6.         this.userDao = userDao;  
  7.     }  
  8.       
  9.     @Override  
  10.     public void updateUser(User user) {  
  11.         userDao.updateUser(user);  
  12.         System.out.println(1/0); // 运行时异常  
  13.     }  
  14. }  

7. dao接口:

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public interface UserDao {  
  2.     User findUserById(String id);  
  3.     void updateUser(User user);  
  4. }  

8. dao实现:

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {  
  2.   
  3.     @Override  
  4.     public User findUserById(String id) {  
  5.         SqlSession sqlSession = super.getSqlSession();  
  6.         User user = (User) sqlSession.selectOne(User.class.getName() + ".selectUserById", id);  
  7.         return user;  
  8.     }  
  9.       
  10.     @Override  
  11.     public void updateUser(User user) {  
  12.         super.getSqlSession().update(User.class.getName() + ".updateUserByCondition", user);  
  13.     }  
  14. }  

9. mybatis全局配置:sqlMapConfig.xml

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.     <typeAliases>  
  7.         <typeAlias type="com.zdp.domain.User" alias="User"/>  
  8.     </typeAliases>  
  9.     <mappers>  
  10.         <!-- 映射文件的位置  -->  
  11.         <mapper resource="com/zdp/domain/User.xml" />  
  12.     </mappers>  
  13. </configuration>  

10. spring配置:ApplicationContext.xml

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:aop="http://www.springframework.org/schema/aop"  
  6.     xmlns:tx="http://www.springframework.org/schema/tx"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  8.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  9.     http://www.springframework.org/schema/context  
  10.     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  11.     http://www.springframework.org/schema/tx  
  12.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  13.     http://www.springframework.org/schema/aop   
  14.     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  
  15.   
  16.     <!-- 配置数据源 -->  
  17.     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  18.         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
  19.         <property name="url" value="jdbc:mysql:///test"/>  
  20.         <property name="username" value="root"/>  
  21.         <property name="password" value="root"/>  
  22.     </bean>  
  23.       
  24.     <!-- session工厂 -->  
  25.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  26.         <property name="dataSource" ref="dataSource" />  
  27.           
  28.         <!-- mybatis总配置文件的位置 -->  
  29.         <property name="configLocation" value="classpath:sqlMapConfig.xml"/>  
  30.     </bean>  
  31.       
  32.     <!-- 配置事务管理 -->  
  33.     <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  34.         <property name="dataSource" ref="dataSource"/>  
  35.     </bean>  
  36.       
  37.     <tx:advice id="transactionAdvice" transaction-manager="transactionManager">    
  38.         <tx:attributes>    
  39.             <tx:method name="delete*" propagation="REQUIRED" />    
  40.             <tx:method name="save*" propagation="REQUIRED" />    
  41.             <tx:method name="update*" propagation="REQUIRED" />    
  42.             <tx:method name="find*" read-only="true" />    
  43.             <tx:method name="get*" read-only="true" />    
  44.             <tx:method name="select*" read-only="true" />    
  45.         </tx:attributes>    
  46.     </tx:advice>    
  47.         
  48.     <aop:config>    
  49.         <!-- 第一个"*"代表所有类, 第二个"*"代表所有方法, ".."代表任意参数 -->    
  50.         <aop:pointcut id="pointcut" expression="execution(* com.zdp.service.*.*(..))" />    
  51.           
  52.         <!-- 把事务控制在service层 -->    
  53.         <aop:advisor pointcut-ref="pointcut" advice-ref="transactionAdvice" />    
  54.     </aop:config>   
  55.       
  56.     <!-- 业务处理 -->  
  57.     <bean id="userDao" class="com.zdp.dao.impl.UserDaoImpl">  
  58.         <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
  59.     </bean>  
  60.       
  61.     <bean id="userService" class="com.zdp.service.impl.UserServiceImpl">  
  62.         <property name="userDao" ref="userDao"/>  
  63.     </bean>  
  64. </beans>  

11. junit测试:

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public class SpringTest {  
  2.     private ApplicationContext context;  
  3.   
  4.     @Before  
  5.     public void sprintInit() {  
  6.         context = new ClassPathXmlApplicationContext("ApplicationContext.xml");  
  7.     }  
  8.       
  9.     @Test  
  10.     public void testFindUserById() {  
  11.         UserDao userDao = (UserDao) context.getBean("userDao");  
  12.         User user = userDao.findUserById("001");  
  13.         System.out.println(user);  
  14.     }     
  15.           
  16.     @Test  
  17.     public void testUpdateUser() {  
  18.         UserService userService = (UserService) context.getBean("userService");  
  19.         User user = new User();  
  20.         user.setId("001");  
  21.         user.setUname("zhangsan1");  
  22.         userService.updateUser(user);  
  23.     }  
  24. }  
原创粉丝点击