`

MyBatis+Spring 事务管理

 
阅读更多

实体类:Emp.java

01 package com.lixing.scm.entity;
02  
03 public class Emp {
04   private String id;
05   private String name;
06   private String sex;
07   private int age;
08   private String phone;
09   public String getId() {
10     return id;
11   }
12   public void setId(String id) {
13     this.id = id;
14   }
15   public String getName() {
16     return name;
17   }
18   public void setName(String name) {
19     this.name = name;
20   }
21   public String getSex() {
22     return sex;
23   }
24   public void setSex(String sex) {
25     this.sex = sex;
26   }
27   public int getAge() {
28     return age;
29   }
30   public void setAge(int age) {
31     this.age = age;
32   }
33   public String getPhone() {
34     return phone;
35   }
36   public void setPhone(String phone) {
37     this.phone = phone;
38   }
39 }

定义实体内操作接口:EmpMapper.java

01 package com.lixing.scm.test.mapper;
02  
03 import java.util.List;
04 import java.util.Map;
05  
06 import com.lixing.scm.entity.Emp;
07  
08 public interface EmpMapper {
09   void insertEmp(Emp emp);
10   List<Emp> getAllEmp();
11   Emp getById(String id);
12   void deleteEmp(String id);
13   void updateEmp(Map<String,Object> map);
14 }

[代码] 定义实体类操作接口的映射文件:EmpMapper.xml

01 <?xml version="1.0" encoding="UTF-8" ?>
02 <!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"       
03         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
04 <mapper namespace="com.lixing.scm.test.mapper.EmpMapper">
05   <parameterMap type="com.lixing.scm.entity.Emp" id="parameterMapEmp">
06     <parameter property="id"/>
07  
08     <parameter property="name"/>
09     <parameter property="sex"/>
10     <parameter property="age"/>
11     <parameter property="phone"/>
12   </parameterMap>
13    
14   <resultMap type="com.lixing.scm.entity.Emp" id="resultMapEmp">
15  
16     <result property="id" column="id"/>
17     <result property="name" column="name"/>
18     <result property="sex" column="sex"/>
19     <result property="age" column="age"/>
20     <result property="phone" column="phone"/>
21   </resultMap>
22  
23    
24   <insert id="insertEmp" parameterMap="parameterMapEmp">
25     INSERT INTO emp(id,name,sex,age,phone)
26     VALUES(?,?,?,?,?)
27   </insert>
28   <select id="getAllEmp"    resultMap="resultMapEmp">
29     SELECT * FROM emp
30   </select>
31   <select id="getById" parameterType="String" resultMap="resultMapEmp">
32  
33     SELECT * FROM emp
34     WHERE id=#{value}
35   </select>
36   <delete id="deleteEmp" parameterType="String">
37     DELETE FROM emp
38     WHERE id=#{value}
39   </delete>
40   <update id="updateEmp" parameterType="java.util.Map">
41     UPDATE emp
42     SET name=#{name},sex=#{sex},age=#{age},phone=#{phone}
43     WHERE id=#{id}
44   </update>
45  
46 </mapper>

Spring3.0.6定义:applicationContext.xml

01 <?xml version="1.0" encoding="UTF-8"?>
02 <beans xmlns="http://www.springframework.org/schema/beans"
03   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04   xmlns:context="http://www.springframework.org/schema/context"
05   xmlns:aop="http://www.springframework.org/schema/aop"
06   xmlns:tx="http://www.springframework.org/schema/tx"
07   xsi:schemaLocation="http://www.springframework.org/schema/beans
08          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
09          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  
18   <context:annotation-config />
19   <context:component-scan base-package="com.lixing.scm.test.*" />
20  
21  
22   <!-- jdbc.propertis Directory -->
23   <bean
24     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
25     <property name="locations" value="classpath:jdbc.properties" />
26  
27   </bean>
28  
29   <bean id="MyDataSource" destroy-method="close"
30     class="org.apache.commons.dbcp.BasicDataSource">
31     <property name="driverClassName" value="${jdbc.driverClassName}" />
32     <property name="url" value="${jdbc.url}" />
33     <property name="username" value="${jdbc.username}" />
34     <property name="password" value="${jdbc.password}" />
35  
36   </bean>
37  
38   <!-- SqlSessionFactory -->
39   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
40     <property name="dataSource" ref="MyDataSource" />
41   </bean>
42   <!-- ScanMapperFiles -->
43  
44   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
45     <property name="basePackage" value="com.lixing.scm.test.mapper" />
46   </bean>
47  
48  
49  
50

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

======================================    -->

51

  <bean name="transactionManager"

     class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    

52           <property name="dataSource" ref="MyDataSource"></property>
53  
54     </bean>    
55    
56   <tx:advice id="userTxAdvice" transaction-manager="transactionManager">
57     <tx:attributes>
58       <tx:method name="delete*" propagation="REQUIRED" read-only="false"
59

                            rollback-for="java.lang.Exception" 

          no-rollback-for="java.lang.RuntimeException"/>

60       <tx:method name="insert*" propagation="REQUIRED" read-only="false"
61                             rollback-for="java.lang.RuntimeException" />
62       <tx:method name="update*" propagation="REQUIRED" read-only="false"
63                             rollback-for="java.lang.Exception" />
64  
65        
66       <tx:method name="find*" propagation="SUPPORTS"/>
67       <tx:method name="get*" propagation="SUPPORTS"/>
68       <tx:method name="select*" propagation="SUPPORTS"/>
69     </tx:attributes>
70   </tx:advice>
71    
72   <aop:config>   
73

    <aop:pointcut id="pc" 

expression="execution(public * com.lixing.scm.test.service.*.*(..))" />

 <!--把事务控制在Service层-->

74  
75     <aop:advisor pointcut-ref="pc" advice-ref="userTxAdvice" />
76   </aop:config>
77    
78    
79   <!-- 以下为自定义Bean-->
80   <bean id="empDao" class="com.lixing.scm.test.dao.impl.EmpDaoImpl"
81     autowire="byName" /> 
82

  <bean id="empService" class="com.lixing.scm.test.service.impl.EmpServiceImpl" 

  autowire="byName"/>

83 </beans>

DAO接口:EmpDAO.java

01 package com.lixing.scm.test.dao;
02  
03 import java.util.List;
04 import java.util.Map;
05  
06 import com.lixing.scm.entity.Emp;
07  
08 public interface EmpDao {
09   void insertEmp(Emp emp);
10   List<Emp> getAllEmp();
11   Emp getById(String id);
12   void deleteEmp(String id);
13   void updateEmp(Map<String, Object> map);
14 }

DAO接口实现类:EmpDaoImpl.java

01 package com.lixing.scm.test.dao.impl;
02  
03 import java.util.List;
04 import java.util.Map;
05  
06 import com.lixing.scm.entity.Emp;
07 import com.lixing.scm.test.dao.EmpDao;
08 import com.lixing.scm.test.mapper.EmpMapper;
09  
10 public class EmpDaoImpl implements EmpDao {
11   private EmpMapper empMapper;   //在此处注入一个empMapper
12

                        //这个empMapper由 Spring自动生成                     

  //不需要我们自己手工去定义

13   @Override
14   public void insertEmp(Emp emp) {
15     this.empMapper.insertEmp(emp);
16     throw new RuntimeException("Error");   //测试抛出RuntimeException                           //异常查看数据库是否存在记录
17   }
18  
19   @Override
20   public void deleteEmp(String id) {
21     this.empMapper.deleteEmp(id);
22   }
23  
24   @Override
25   public List<Emp> getAllEmp() {
26     return this.empMapper.getAllEmp();
27   }
28  
29   @Override
30   public Emp getById(String id) {
31     return this.empMapper.getById(id);
32   }
33  
34   @Override
35   public void updateEmp(Map<String, Object> map) {
36     this.empMapper.updateEmp(map);
37   }
38  
39    
40   public EmpMapper getEmpMapper() {
41     return empMapper;
42   }
43  
44   public void setEmpMapper(EmpMapper empMapper) {
45     this.empMapper = empMapper;
46   }
47 }

Service层接口:EmpService.java

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

Service层接口实现类:EmpServiceImpl.java

01 package com.lixing.scm.test.service.impl;
02  
03 import com.lixing.scm.entity.Emp;
04 import com.lixing.scm.test.dao.EmpDao;
05 import com.lixing.scm.test.service.EmpService;
06  
07 public class EmpServiceImpl implements EmpService {
08   private EmpDao empDao;
09  
10   @Override
11   public void insertEmp(Emp emp) {
12     empDao.insertEmp(emp);
13  
14   }
15  
16   public EmpDao getEmpDao() {
17     return empDao;
18   }
19  
20   public void setEmpDao(EmpDao empDao) {
21     this.empDao = empDao;
22   }
23 }

测试类:TestEmpService.java

01 import org.junit.Test;
02 import org.springframework.context.ApplicationContext;
03 import org.springframework.context.support.ClassPathXmlApplicationContext;
04  
05 import com.lixing.scm.entity.Emp;
06 import com.lixing.scm.test.service.EmpService;
07  
08  
09 public class TestEmpService {
10   @Test
11   public void testTrasaction(){
12     Emp emp=new Emp();
13     emp.setId("00000003");
14     emp.setName("某某某");
15     emp.setAge(50);
16     emp.setSex("男");
17     emp.setPhone("566666");
18      
19

    ApplicationContext ctx=

newClassPathXmlApplicationContext("classpath:applicationContext.xml");

20     EmpService service=ctx.getBean(EmpService.class);
21     service.insertEmp(emp);
22   }
23 }
分享到:
评论

相关推荐

    struts2+spring+mybatis+easyui的实现

    在本项目中,Spring主要负责管理Bean,如数据库连接池、事务管理、DAO和Service等。通过Spring的AOP,我们可以方便地实现事务控制和日志记录。同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action...

    MyBatis+Spring+Struts2

    在实际应用中,Struts2负责处理用户请求和视图渲染,Spring作为核心容器管理依赖注入(DI)和面向切面编程(AOP),而MyBatis则作为持久层框架,负责与数据库交互。 【标签】"源码"意味着这个压缩包可能包含了一个...

    MyBatis+Spring+Maven的简单整合Demo

    在本Demo中,你需要理解如何配置MyBatis的核心配置文件(mybatis-config.xml),包括数据源设置、事务管理器配置以及Mapper扫描等。此外,还需要熟悉XML映射文件的编写,如定义SQL查询、插入、更新和删除操作。 ...

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。 业务方案: 1、批处理定期提交。 2、并行批处理:并行处理工作。 3、...

    activiti+spring+srping Mvc+mybatis+maven整合

    2. 配置Spring:配置Spring的核心容器,包括bean的定义、事务管理、数据源以及Activiti的相关配置。使用`applicationContext.xml`文件进行这些配置。 3. 集成Spring MVC:配置Spring MVC的DispatcherServlet,定义...

    myBatis+spring+cxf 框架简单整合(包jar)

    2. 集成MyBatis:配置MyBatis的主配置文件,包括数据源、事务管理器、SqlSessionFactory和Mapper文件的位置。 3. 创建CXF服务:定义Web服务接口,实现该接口并配置到CXF中。CXF提供了基于注解的Web服务开发方式,...

    maven+spring MVC+Mybatis+jetty+mysql

    此外,Spring MVC 可以与Spring框架的其他模块无缝集成,如依赖注入、事务管理等。 3. Mybatis: Mybatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的JDBC代码和...

    Maven + spring + mybatis + mysql + 事务管理

    在企业级Java开发中,"Maven + Spring + MyBatis + MySQL + 事务管理"是一个常见的技术栈组合,它们各自扮演着不同的角色,构建出高效、稳定的后端系统。 **Maven** 是一个项目管理和综合工具,它帮助开发者管理...

    springMVC+Spring+Mybatis+Maven整合代码案例

    5、测试Spring+mybatis的框架搭建,写单元测试JUnit,测试事务配置等:model--&gt;dao(mapper)--&gt;service--&gt;test 6、映入SpringMVC:配置SpringMVC配置信息。--&gt;配置文件:spring-mvc.xml(扫描controller) 7...

    spring +springboot+mybatis+maven 读写分离及事务管理

    spring +springboot+mybatis+maven 读写分离,数据库采用mysql, 采用springboot 采用项目框架搭建,继承spring 中的AbstractRoutingDataSource,实现 determineCurrentLookupKey 进行数据源的动态切换,采用Spring ...

    Mybatis+Spring整合项目

    同时,Spring的AOP机制使得事务管理、日志记录等横切关注点的实现变得简单,减少了代码的重复性。 在这个人事管理系统中,Spring还提供了Spring MVC框架来处理HTTP请求,实现视图与模型的分离。Controller接收请求...

    maven+spring+mybatis+mysql+junit jar项目框架搭建

    在本项目中,Spring将作为服务层和控制层的基石,负责管理bean的生命周期和事务处理。 MyBatis是一个轻量级的持久层框架,它允许开发者通过简单的XML或注解配置将SQL语句与Java代码关联起来。MyBatis消除了几乎所有...

    springmvc+mybatis+spring+jquery

    在本项目中,Spring不仅管理了SpringMVC和MyBatis的生命周期,还负责事务控制和业务服务的组装。 jQuery是一个流行的JavaScript库,简化了DOM操作、事件处理、动画效果和Ajax交互。在本项目中,jQuery用于增强用户...

    mybatis+spring+springtest

    "springtest" 是Spring框架的一部分,提供了测试支持,包括对Spring应用上下文的加载、模拟依赖注入、声明式事务管理等,使得对Spring应用进行单元测试和集成测试变得简单。 在集成MyBatis、Spring和Spring Test的...

    MyBatis+SpringDemo项目

    当MyBatis与Spring整合时,Spring可以负责管理MyBatis的SqlSessionFactory和SqlSession,使得事务管理和对象的创建更加便捷。 在MyBatisDemo中,我们需要进行以下步骤来配置MyBatis: 1. 创建MyBatis的配置文件...

    Spring Boot + MyBatis + thymeleaf + MySQL + jQuery +ajax图书借阅管理系统

    本系统以“Spring Boot + MyBatis + thymeleaf + MySQL + jQuery + ajax”为核心技术栈,构建了一个轻量级、易维护的图书借阅管理系统,旨在提供一套完整且实用的图书管理解决方案。 首先,Spring Boot作为Java领域...

    Mybatis+Spring3应用源码

    此外,还可以通过TransactionManager配置实现事务管理,使得Mybatis的操作能够参与到Spring的事务管理中。 4. **JSP**:在"MyBatis_Spring3_jsp"这个文件名中,JSP代表JavaServer Pages,是Java Web开发中的视图层...

    springmvc+mybatis+shiro jar包

    Spring MVC、MyBatis 和 ...在实际项目中,还需要配置相应的XML或Java配置文件,定义bean、数据源、事务管理器等,以实现各组件间的协同工作。同时,根据项目需求,可能还需集成其他工具,如日志、缓存、定时任务等。

    物流项目struts+mybatis+spring

    而Spring框架作为企业级应用的基石,提供了依赖注入、面向切面编程、事务管理等多种功能,使得整个系统更加模块化,便于组件的管理和扩展。 在物流管理项目中,这些技术可能被用于实现以下核心功能: 1. **用户管理...

    MAVEN-Mybatis+spring+springMVC

    同时,Spring的AOP特性可以方便地实现事务管理和日志记录等横切关注点。 **4. Spring MVC** Spring MVC是Spring框架的一个模块,用于构建Web应用程序的Model-View-Controller架构。它提供了一种分层的方式来处理...

Global site tag (gtag.js) - Google Analytics