首页 > 其他分享 >spring-申明式事务

spring-申明式事务

时间:2023-02-22 22:14:35浏览次数:36  
标签:事务 spring UserMapper User public user import id 申明

一.什么是事务

事务的原则是:处于事务中的sql代码块会保持一致状态,即要么都能改变数据库,要么都不能改变数据库

ACID原则:

  • 原子性
  • 一致性
  • 隔离性
  1. 多个业务可能操作同一个业务,防止数据损坏
  • 持久性
  1. 事务一旦提交,无论体系发生什么问题,结果都不会受影响,将被持久化到存储器

二.spring中的事务管理

  • 声明式事务:AOP(不会改动源代码,只需要再spring容器中注入)
  • 编程式事务:需要在代码中,完成事务处理

测试环境:

接口:

package top.lostyou.dao;

import org.apache.ibatis.annotations.Param;
import top.lostyou.pojo.User;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    List<User> selectUser();
    int insertUser(User user);
    int deleteUser(@Param("id") int id);

}

 

sql语句:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.lostyou.dao.UserMapper">
    <select id="selectUser" resultType="user">
        SELECT * FROM mybatis.user
    </select>
    <insert id="insertUser" parameterType="user">
        INSERT INTO mybatis.user(id, name, pwd) VALUES (#{id},#{name},#{pwd})
    </insert>
    <delete id="deleteUser" parameterType="int">
        DELETE FROM mybatis.user WHERE id=#{id}
    </delete>
</mapper>

 

spring中配置事务:

<?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:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop.xsd">
    <bean id="dateSources" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;uesUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dateSources"/>
        <property name="configLocation" value="classpath:mybatis.xml"/>
        <property name="mapperLocations" value="classpath:top/lostyou/dao/*.xml"/>
    </bean>

    <!--配置声明式事务:也可以叫开启事务-->
    <bean id="transactionManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dateSources"/>
    </bean>
    <!--结合AOP实现事务植入-->
    <!--配置事务通知-->
    <tx:advice id="tx" transaction-manager="transactionManger">
        <!--配置给那些方法实现事务-->
        <tx:attributes>
            <tx:method name="insertUser"/>
            <tx:method name="deleteUser"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <!--配置事务切入-->
    <aop:config>
        <aop:pointcut id="poincut" expression="execution(* top.lostyou.dao.*.*(..))"/>
        <aop:advisor advice-ref="tx" pointcut-ref="poincut"/>
    </aop:config>
</beans>

 

实现类:

package top.lostyou.dao;

import org.mybatis.spring.support.SqlSessionDaoSupport;
import top.lostyou.pojo.User;

import java.util.List;
import java.util.Map;

public class UserImp extends SqlSessionDaoSupport implements UserMapper {

    public List<User> selectUser() {
        User user = new User(6, "mmmmm", "321654");
        int id = 5;
        insertUser(user);
        deleteUser(id);
        return getSqlSession().getMapper(UserMapper.class).selectUser();
    }

    public int insertUser(User user) {
        return getSqlSession().getMapper(UserMapper.class).insertUser(user);
    }

    public int deleteUser(int id) {
        return getSqlSession().getMapper(UserMapper.class).deleteUser(id);
    }
}

 

测试类:

import org.springframework.context.support.ClassPathXmlApplicationContext;
import top.lostyou.dao.UserMapper;
import top.lostyou.pojo.User;

import java.util.List;

public class myTest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("User.xml");
        UserMapper userImp = context.getBean("userImp", UserMapper.class);
        List<User> users = userImp.selectUser();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

 

标签:事务,spring,UserMapper,User,public,user,import,id,申明
From: https://www.cnblogs.com/5ran2yl/p/17146131.html

相关文章

  • ssm学习笔记23001-spring+mybatis修改删除和查询
    spring+mybatis修改删除和查询1、在UserMapper接口类中,创建接口在UserMapper接口类中,创建接口packagecom.wjw.mybatis.mapper;importcom.wjw.mybatis.pojo.User;......
  • spring5随笔
    1、Spring1.1、简介Spring:春天----->给软件行业带来了春天!2002,首次推出了Spring框架的雏形:interface21框架!Spring框架即以interface21框架为基础,经过重新设计,......
  • 【Spring 源码】001-环境准备:Spring模块梳理
    【Spring源码】001-环境准备:Spring模块梳理文章目录​​【Spring源码】001-环境准备:Spring模块梳理​​​​一、本节课程的目的​​​​二、出于信仰学习Spring的简史​​......
  • 整合mybatis-spring
    一.整合mybatis步骤:第一步:导入相关的jar包:junitmybatismysql数据库spring相关的aop植入mybatis-spring【新包,兼容mybatis和spring】<dependencies>......
  • 利用SpringBoot自动装配原理自定义starter
    在使用SpringBoot时候我们经常会碰到引入很多的starter的自动化配置,有了这些starter以后我们就可以很轻松的完成一个企业级的开发项目,很多小朋友就会对于starter很神奇,其实......
  • IDEA一键运行多个springboot微服务模块
    效果图  如果在idea工具底部看到Services      那么点击可以看到RunDashBoard面板,SpringBoot->Running是启动的多个微服务模块 如果没有Services......
  • 理论:第十二章:Dubbo的运行原理,支持什么协议,与SpringCould相比它为什么效率要高一些,Zook
    Dubbo简单的介绍一下Dubbo?(Dubbo是什么)dubbo就是个服务调用的东东。为什么怎么说呢?因为Dubbo是由阿里开源的一个RPC分布式框架那么RPC是什么呢?就是不同的应用部署到......
  • 【日志级别】springboot-logging 日志级别调整
    springboot日志,配置文件中,logging:level:org.springframework.web.servlet.DispatcherServlet:INFOcom.dy.springboot.server.mapper:INFOcom.carr......
  • Springboot 整合 Swagger3
    Springboot整合Swagger环境版本服务名称版本号Springboot2.7.8(GA)Java1.8导入依赖方式一:<dependency><groupId>io.springfox</groupId>......
  • 关于服务网关Gateway-Spring Cloud Gateway
    前置知识WebFlux:点击-SpringWebFlux是一个异步非阻塞式IO模型,通过少量的容器线程就可以支撑大量的并发访问。底层使用的是Netty容器,这点也和传统的SpringMVC不一......