MyBatis+Spring 事务管理

在网上查了MyBatis+Spring的结合,真的是太多太多了,可是没有几个代码是完整的..这两项整合花了我两天时间,终于被我整合完成...其实也很简单,原因:JAR包的问题...
由于Ibatis被改名为MyBatis,所以,网上很多都是有关Ibatis而MyBatis却很少很少...
本文以MyBatis3.0.6 + Spring3.0.6为例结合(一定要这个版本才行):
定义一个实体类: Emp.java
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;
  }
}

定义实体内操作接口:EmpMapper.java
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);
}

定义实体类操作接口的映射文件:EmpMapper.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.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 >
Spring3.0.6定义: 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" >

  <!--     -->
   < 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 >

DAO接口:EmpDAO.java
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);
}

DAO接口实现类:EmpDaoImpl.java
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;
  }
}
Service层接口:EmpService.java
package com.lixing.scm.test.service;

import com.lixing.scm.entity.Emp;

public  interface EmpService {
   void insertEmp(Emp emp);
}

Service层接口实现类:EmpServiceImpl.java
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;
  }
}
测试类:TestEmpService.java
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、付费专栏及课程。

余额充值