MyBatis+Spring 事务管理

转载来自:http://www.oschina.net/code/snippet_54100_8874

在网上查了MyBatis+Spring的结合,真的是太多太多了,可是没有几个代码是完整的..这两项整合花了我两天时间,终于被我整合完成...其实也很简单,原因:JAR包的问题... 由于Ibatis被改名为MyBatis,所以,网上很多都是有关Ibatis而MyBatis却很少很少... 本文以MyBatis3.0.6 + Spring3.0.6为例结合(一定要这个版本才行):
出处: http://kinglixing.blog.51cto.com/3421535/723870

1. [代码]实体类:Emp.java     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.lixing.scm.entity;
  public class Emp {
   private String id;
   private String name;
   private String sex;
   private int age;
   private String phone;
   public String getId() {
     return id;
   }
   public void setId(String id) {
     this .id = id;
   }
   public String getName() {
     return name;
   }
   public void setName(String name) {
     this .name = name;
   }
   public String getSex() {
     return sex;
   }
   public void setSex(String sex) {
     this .sex = sex;
   }
   public int getAge() {
     return age;
   }
   public void setAge( int age) {
     this .age = age;
   }
   public String getPhone() {
     return phone;
   }
   public void setPhone(String phone) {
     this .phone = phone;
   }
}

2. [代码]定义实体内操作接口:EmpMapper.java     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.lixing.scm.test.mapper;
  import java.util.List; import java.util.Map;
  import com.lixing.scm.entity.Emp;
  public interface EmpMapper {
   void insertEmp(Emp emp);
   List<Emp> getAllEmp();
   Emp getById(String id);
   void deleteEmp(String id);
   void updateEmp(Map<String,Object> map);
}

3. [代码]定义实体类操作接口的映射文件:EmpMapper.xml     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<? 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.lixing.scm.test.mapper.EmpMapper"
   < parameterMap type = "com.lixing.scm.entity.Emp" id = "parameterMapEmp" >
     < parameter property = "id" />
     < parameter property = "name" />
     < parameter property = "sex" />
     < parameter property = "age" />
     < parameter property = "phone" />
   </ parameterMap >
    
   < resultMap type = "com.lixing.scm.entity.Emp" id = "resultMapEmp" >
     < result property = "id" column = "id" />
     < result property = "name" column = "name" />
     < result property = "sex" column = "sex" />
     < result property = "age" column = "age" />
     < result property = "phone" column = "phone" />
   </ resultMap >
    
   < insert id = "insertEmp" parameterMap = "parameterMapEmp" >
     INSERT INTO emp(id,name,sex,age,phone)
     VALUES(?,?,?,?,?)
   </ insert >
   < select id = "getAllEmp"    resultMap = "resultMapEmp" >
     SELECT * FROM emp
   </ select >
   < select id = "getById" parameterType = "String" resultMap = "resultMapEmp" >
     SELECT * FROM emp
     WHERE id=#{value}
   </ select >
   < delete id = "deleteEmp" parameterType = "String" >
     DELETE FROM emp 
     WHERE id=#{value}
   </ delete >
   < update id = "updateEmp" parameterType = "java.util.Map" >
     UPDATE emp
     SET name=#{name},sex=#{sex},age=#{age},phone=#{phone}
     WHERE id=#{id}
   </ update >
</ mapper >

4. [代码]Spring3.0.6定义:applicationContext.xml     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<? 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">
  
   <!--    -->
   < context:annotation-config />
   < context:component-scan base-package = "com.lixing.scm.test.*" />
  
  
   <!-- jdbc.propertis Directory -->
   < bean
     class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
     < property name = "locations" value = "classpath:jdbc.properties" />
   </ bean >
  
   < bean id = "MyDataSource" destroy-method = "close"
     class = "org.apache.commons.dbcp.BasicDataSource" >
     < property name = "driverClassName" value = "${jdbc.driverClassName}" />
     < property name = "url" value = "${jdbc.url}" />
     < property name = "username" value = "${jdbc.username}" />
     < property name = "password" value = "${jdbc.password}" />
   </ bean >
  
   <!-- SqlSessionFactory -->
   < bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" >
     < property name = "dataSource" ref = "MyDataSource" />
   </ bean >
   <!-- ScanMapperFiles -->
   < bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer" >
     < property name = "basePackage" value = "com.lixing.scm.test.mapper" />
   </ bean >
  
  
  
   <!-- ================================事务相关控制=================================================    -->
   < bean name = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >     
           < property name = "dataSource" ref = "MyDataSource" ></ property >
     </ bean >     
    
   < tx:advice id = "userTxAdvice" transaction-manager = "transactionManager" >
     < tx:attributes >
       < tx:method name = "delete*" propagation = "REQUIRED" read-only = "false" 
                             rollback-for = "java.lang.Exception" no-rollback-for = "java.lang.RuntimeException" />
       < tx:method name = "insert*" propagation = "REQUIRED" read-only = "false" 
                             rollback-for = "java.lang.RuntimeException" />
       < tx:method name = "update*" propagation = "REQUIRED" read-only = "false" 
                             rollback-for = "java.lang.Exception" />
        
       < tx:method name = "find*" propagation = "SUPPORTS" />
       < tx:method name = "get*" propagation = "SUPPORTS" />
       < tx:method name = "select*" propagation = "SUPPORTS" />
     </ tx:attributes >
   </ tx:advice >
    
   < aop:config >    
     < aop:pointcut id = "pc" expression = "execution(public * com.lixing.scm.test.service.*.*(..))" /> <!--把事务控制在Service层-->
     < aop:advisor pointcut-ref = "pc" advice-ref = "userTxAdvice" />
   </ aop:config >
    
    
   <!-- 以下为自定义Bean-->
   < bean id = "empDao" class = "com.lixing.scm.test.dao.impl.EmpDaoImpl"
     autowire = "byName" />  
   < bean id = "empService" class = "com.lixing.scm.test.service.impl.EmpServiceImpl"    autowire = "byName" />
</ beans >

5. [代码]DAO接口:EmpDAO.java     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.lixing.scm.test.dao;
  import java.util.List; import java.util.Map;
  import com.lixing.scm.entity.Emp;
  public interface EmpDao {
   void insertEmp(Emp emp);
   List<Emp> getAllEmp();
   Emp getById(String id);
   void deleteEmp(String id);
   void updateEmp(Map<String, Object> map);
}

6. [代码]DAO接口实现类:EmpDaoImpl.java     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.lixing.scm.test.dao.impl;
  import java.util.List; import java.util.Map;
  import com.lixing.scm.entity.Emp; import com.lixing.scm.test.dao.EmpDao; import com.lixing.scm.test.mapper.EmpMapper;
  public class EmpDaoImpl implements EmpDao {
   private EmpMapper empMapper;   //在此处注入一个empMapper                         //这个empMapper由 Spring自动生成                       //不需要我们自己手工去定义   @Override
   public void insertEmp(Emp emp) {
     this .empMapper.insertEmp(emp);
     throw new RuntimeException( "Error" );   //测试抛出RuntimeException                           //异常查看数据库是否存在记录   }
  
   @Override
   public void deleteEmp(String id) {
     this .empMapper.deleteEmp(id);
   }
  
   @Override
   public List<Emp> getAllEmp() {
     return this .empMapper.getAllEmp();
   }
  
   @Override
   public Emp getById(String id) {
     return this .empMapper.getById(id);
   }
  
   @Override
   public void updateEmp(Map<String, Object> map) {
     this .empMapper.updateEmp(map);
   }
  
    
   public EmpMapper getEmpMapper() {
     return empMapper;
   }
  
   public void setEmpMapper(EmpMapper empMapper) {
     this .empMapper = empMapper;
   }
}

7. [代码]Service层接口:EmpService.java     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
package com.lixing.scm.test.service;
  import com.lixing.scm.entity.Emp;
  public interface EmpService {
   void insertEmp(Emp emp);
}

8. [代码]Service层接口实现类:EmpServiceImpl.java     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.lixing.scm.test.service.impl;
  import com.lixing.scm.entity.Emp; import com.lixing.scm.test.dao.EmpDao; import com.lixing.scm.test.service.EmpService;
  public class EmpServiceImpl implements EmpService {
   private EmpDao empDao;
  
   @Override
   public void insertEmp(Emp emp) {
     empDao.insertEmp(emp);
  
   }
  
   public EmpDao getEmpDao() {
     return empDao;
   }
  
   public void setEmpDao(EmpDao empDao) {
     this .empDao = empDao;
   }
}

9. [代码]测试类:TestEmpService.java     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
  import com.lixing.scm.entity.Emp; import com.lixing.scm.test.service.EmpService;
  
  public class TestEmpService {
   @Test
   public void testTrasaction(){
     Emp emp= new Emp();
     emp.setId( "00000003" );
     emp.setName( "某某某" );
     emp.setAge( 50 );
     emp.setSex( "男" );
     emp.setPhone( "566666" );
      
     ApplicationContext ctx= new ClassPathXmlApplicationContext( "classpath:applicationContext.xml" );
     EmpService service=ctx.getBean(EmpService. class );
     service.insertEmp(emp);
   }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值