`

mybatis 和 spring 整合事务管理

 
阅读更多
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);
  }
}

 

分享到:
评论

相关推荐

    mybatis与spring整合的全部jar包

    以上就是关于“mybatis与spring整合的全部jar包”的详细知识点,这些组件共同构建了一个灵活且易于维护的Java Web应用程序。通过理解这些概念和技术,开发者可以更好地理解和使用SSM框架来开发复杂的企业级应用。

    mybatis与spring整合全部jar包

    这个“mybatis与spring整合全部jar包”包含了这三个框架整合所需的所有依赖库,使得开发者可以快速搭建SSM项目。 首先,让我们深入了解一下这三个组件: 1. **Spring**:Spring 是一个全面的Java企业级应用开发...

    mybatis-spring 整合包

    2. **事务管理**:MyBatis-Spring支持Spring的声明式事务管理,可以将MyBatis的操作纳入Spring的事务管理范围,确保数据的一致性。 3. **简化SqlSession管理**:通过使用SqlSessionTemplate和SqlSessionDaoSupport...

    mybatis和spring整合jar包

    标题中的"mybatis和spring整合jar包"表明我们要讨论的是如何将两个流行的Java框架——MyBatis和Spring——集成在一起,以便在同一个项目中利用它们各自的优势。MyBatis是一个轻量级的持久层框架,它允许开发者用SQL...

    mybatis-spring整合项目

    1. **Bean工厂**: Spring作为Bean工厂,负责创建和管理MyBatis的SqlSessionFactory和SqlSession。 2. **事务管理**: Spring可以控制MyBatis的事务边界,通过PlatformTransactionManager实现事务的提交和回滚。 3. **...

    mybatis-spring整合jar包

    总的来说,MyBatis-Spring整合简化了在Spring应用中使用MyBatis的过程,提高了开发效率,并且提供了良好的事务管理和依赖注入功能。通过正确配置和使用,可以构建出稳定、高效的Java Web应用程序。

    mybatis-Spring整合jar包

    1. **依赖注入**:Spring通过DI来管理MyBatis的SqlSessionFactory或SqlSessionTemplate,使得在Spring环境中可以方便地创建和管理MyBatis的实例。 2. **事务管理**:Spring提供声明式事务管理,可以在配置文件中...

    mybatis和spring整合jar

    MyBatis和Spring的整合是Java开发中常见的一种技术组合,尤其在企业级应用中,它们的集成可以提供强大的持久层支持。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,而Spring作为一款全能...

    mybatis与spring整合全部jar包(包括springmvc

    Spring框架提供了强大的依赖注入和管理服务,而MyBatis则是一个轻量级的SQL映射框架,使得数据库操作更加简单直接。在标题提到的“mybatis与spring整合全部jar包(包括springmvc)”中,我们关注的重点是这两个框架的...

    MyBatis-Spring整合示例

    在MyBatis-Spring整合中,我们需要配置TransactionManager,例如使用DataSourceTransactionManager,并将其应用到Spring的事务管理中。 4. **Mapper接口与XML配置**: MyBatis中的Mapper接口可以与XML配置文件配合...

    MyBatis_Spring整合jar包(全部jar包)

    MyBatis_Spring整合是Java开发中常见的数据访问层解决方案,它将MyBatis的灵活映射机制与Spring的依赖注入和事务管理相结合,提供了一种高效、便捷的数据操作方式。这个压缩包包含了进行MyBatis与Spring整合所需的...

    spring_mybatis 整合jar包

    在与Spring整合后,可以通过Spring的ApplicationContext来管理SqlSessionFactory和Mapper接口,实现事务的统一管理和DAO的自动注入。 在压缩包子文件的文件名称列表中,虽然只列出了"lib",但我们可以推测,这个...

    mybatis和spring 整合的Demo

    通过以上步骤,我们可以有效地将MyBatis和Spring整合在一起,利用两者的优点,构建出高效、可维护的Java Web应用。在实际项目中,可以根据需求选择适合的配置方式,如全注解、全XML或混合使用,以达到最佳效果。

    mybatis-spring整合开发jar包.zip

    【标题】"mybatis-spring整合开发jar包.zip"中包含的是Mybatis、Spring和Mybatis-Spring整合的jar文件,这些是Java开发中的关键组件,尤其在构建基于MVC架构的Web应用时。Mybatis是一个优秀的持久层框架,它支持定制...

    mybatis-spring整合包.zip

    MyBatis-Spring整合后,主要实现以下功能: 1. **SqlSessionFactoryBean**:MyBatis-Spring提供了一个SqlSessionFactoryBean,它继承自Spring的AbstractSqlSessionFactoryBean,用于创建SqlSessionFactory。开发者...

    mybatis-spring整合简单的实例代码

    通过这个实例,初学者可以了解到MyBatis-Spring整合的基本流程,理解如何在Spring环境中使用MyBatis进行数据操作,这对于理解和掌握企业级Java Web开发至关重要。在实际项目中,这样的整合方式可以带来更好的模块化...

    mybatis和spring的整合包(完整版).rar

    总结来说,MyBatis与Spring的整合是Java Web开发中常见的实践,它提供了便捷的数据访问和事务管理机制,极大地提高了开发效率。通过理解并熟练掌握SSM框架的配置和使用,开发者能够更好地构建高效、稳定的Web应用。...

    mybatis与spring整合依赖包集

    在Java开发领域,MyBatis和Spring框架的...总之,"mybatis与spring整合依赖包集"为开发者提供了构建MyBatis-Spring整合项目的必要组件,涵盖了数据源、缓存和基础框架的集成,极大地简化了开发过程,提高了开发效率。

    Mybatis与Spring整合所需完整jar包(包含连接池的jar包)

    整合完成后,我们可以通过Spring的依赖注入来轻松地使用MyBatis的Mapper接口进行数据库操作,同时享受到Spring的事务管理、AOP等高级特性。这使得代码更加简洁,降低了耦合度,提高了可维护性。因此,理解并熟练掌握...

    MyBatis和Spring整合jar:mybatis-3.2.7.jar等

    2. **MyBatis-Spring**:mybatis-spring-1.2.2.jar是MyBatis和Spring之间的桥梁,它实现了两者的无缝集成,让开发者可以利用Spring的依赖注入和事务管理特性,同时享受MyBatis的灵活SQL操作。 这个jar包提供了一些...

Global site tag (gtag.js) - Google Analytics