定义一个实体类: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);
  }
}

spring+mybatis的事务配置的更多相关文章

  1. Spring+MyBatis双数据库配置

    Spring+MyBatis双数据库配置 近期项目中遇到要调用其它数据库的情况.本来仅仅使用一个MySQL数据库.但随着项目内容越来越多,逻辑越来越复杂. 原来一个数据库已经不够用了,须要分库分表.所 ...

  2. Spring AOP及事务配置三种模式详解

    Spring AOP简述 Spring AOP的设计思想,就是通过动态代理,在运行期对需要使用的业务逻辑方法进行增强. 使用场景如:日志打印.权限.事务控制等. 默认情况下,Spring会根据被代理的 ...

  3. Spring+MyBatis实践—工程配置

    初次实践:Spring+MyBatis技术搭建框架,采用Bootstrap前端开源框架. 简介: MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所 ...

  4. Spring管理 hibernate 事务配置的五种方式

    Spring配置文件中关于事务配置总是由三个组成部分,DataSource.TransactionManager和代理机制这三部分,无论是那种配置方法,一般变化的只是代理机制这块! 首先我创建了两个类 ...

  5. Spring声明式事务配置详解

    Spring支持编程式事务管理和声明式的事务管理. 编程式事务管理 将事务管理代码嵌到业务方法中来控制事务的提交和回滚 缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码 声明式事务管理 一般情 ...

  6. spring提供的事务配置--纯注解

    spring提供的事务--纯注解 模拟转账业务  ,出错需要事务回滚,没错正常执行 事务和数据库技术都是spring的内置提供的 --------dao包--------------- IAccoun ...

  7. spring+mybatis+springmvc的配置

    1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?><web-app version=&qu ...

  8. Spring+Mybatis+Maven 整合配置

    <?xml version="1.0" encoding="UTF-8"?> <beans default-autowire="by ...

  9. Spring Mybatis多数据源配置范例

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

随机推荐

  1. 【Python学习】之yagmail库实现发送邮件

    上代码: import yagmail sendmail = 'xxx@126.com' sendpswd = 'xxx' receivemail = 'xxx@qq.com' # 连接邮箱服务器 y ...

  2. WebView加载URL跳转到系统浏览器的解决方法

    1.问题 webview加载url跳转到系统浏览器,用户体验非常的差 2.解决方法 重写WebViewClient的shouldOverrideUrlLoading(WebView view, Str ...

  3. JavaEE应用基础平台 AOS-V0.1 RELEASED

    写在最前面 AOS是一个有着悠久历史传承和发扬的平台.她的前世G4Studio自2010年公布V1.0版本号以来,先后经过多次版本号更新.并得到了一些小伙伴的认可和使用.但我们希望做得更好,走得更远. ...

  4. 数据库导入Excel-从基础做起

    近期一直跟着师傅做考试系统的基础.每天与大量的数据打交道.数据的导入.数据的导出.视图的导入导出.核对信息等等,收获挺多的,培养了自己的耐心和细心,也进一步了解了数据库. 一切从基础做起! 来看看近期 ...

  5. wordpress 获取分类ID,分类标题,分类描述,分类链接url函数

    get_cat_ID()    根据分类名称获取分类ID   ///// get_cat_name()    根据分类ID获取分类名称 用法:<?phpget_cat_ID( $cat_name ...

  6. Solr6.5创建core

    首先在solrhome(solrhome的路径和配置见中solr的web.xml)http://www.cnblogs.com/paulversion/p/6827949.html 中创建mycore ...

  7. 使用3DES+Base64来加密传输iOS应用数据

    本文转载至 http://www.erblah.com/post/objective-c/shi-yong-3des-base64lai-jia-mi-chuan-shu-iosying-yong-s ...

  8. zoj 2362 Beloved Sons【二分匹配】

    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2361 来源:http://acm.hust.edu.cn/vjudg ...

  9. 九度OJ 1000:计算a+b

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:35767 解决:15660 题目描述: 求整数a,b的和. 输入: 测试案例有多行,每行为a,b的值. 输出: 输出多行,对应a+b的结果. ...

  10. Xshell连接不上行Linux系统

    之前出现了.我的Linux系统上的主机可以ping通windows的一台电脑, windows也可以ping的通Linux.但是Xshell不能连接. 第一,我感觉是不是我Linux系统的端口被防火墙 ...