zl程序教程

您现在的位置是:首页 >  后端

当前栏目

MyBatis+Spring 事务管理详解编程语言

Springmybatis编程语言 详解 事务管理
2023-06-13 09:20:23 时间

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

实体类: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 

 property name="locations" value="classpath:jdbc.properties" / 

 /bean 

 bean id="MyDataSource" destroy-method="close" 

 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" 

 property name="dataSource" ref="MyDataSource" / 

 /bean 

 !-- ScanMapperFiles -- 

 bean 

 property name="basePackage" value="com.lixing.scm.test.mapper" / 

 /bean 

 !-- ================================事务相关控制================================================= -- 

 bean name="transactionManager" 

 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" 

 autowire="byName" / 

 bean id="empService" 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); 

}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/7998.html

cjavaxml