zoukankan      html  css  js  c++  java
  • Spring事务声明

    1,保证了四个原则

    UserMapper

    package com.miao.mapper;
    
    import com.miao.pojo.User;
    
    import java.util.List;
    
    public interface UserMapper {
        public List<User> selectUser();
    
        public int addUser(User user);
    
        public int deleteUser(int id);
    }

    UserMapperImpl.java

    package com.miao.mapper;
    
    import com.miao.pojo.User;
    import org.mybatis.spring.SqlSessionTemplate;
    
    import java.util.List;
    
    //第一种Spring操作mybatis的方式
    public class UserMapperImpl implements UserMapper{
    
        //之前操作mybatis都使用sqlSession,现在都使用sqlSessiontemplate
    
        private SqlSessionTemplate sqlSessionTemplate;
        public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate)
        {
            this.sqlSessionTemplate=sqlSessionTemplate;
        }
    
        public List<User> selectUser() {
            User user=new User(6,"苗可卓6","15351");
            UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
            mapper.addUser(user);
            mapper.deleteUser(6);
    
            return mapper.selectUser();
        }
    
        public int addUser(User user) {
    
            return sqlSessionTemplate.getMapper(UserMapper.class).addUser(user);
        }
    
        public int deleteUser(int id) {
            return sqlSessionTemplate.getMapper(UserMapper.class).deleteUser(id);
        }
    }

    UserMapper.xml

    <?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="com.miao.mapper.UserMapper">
        <select id="selectUser" resultType="User">
            select * from mybatis.user;
        </select>
        <insert id="addUser" 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>

    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:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop
            https://www.springframework.org/schema/aop/spring-aop.xsd
    ">
        <import resource="spring-dao.xml"/>
    
        <!--方式一:重点理解这步-->
        <bean id="userMapper" class="com.miao.mapper.UserMapperImpl">
            <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
        </bean>
    
    
        <!--方式二,此处直接使用sqlSessionFactory,跳过了sqlSessionTemplate这步-->
      <!--  <bean id="userMapper2" class="com.miao.mapper.UserMapperImpl2">
            <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        </bean>-->
    
    </beans>

    mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    
    <configuration>
        <!--这些标签的引入还需要注意顺序-->
    
    
    
    
    
    
        <!--别名   简化代码-->
        <typeAliases>
            <package name="com.miao.pojo"/>
        </typeAliases>
    
    
    
    
        <!--此处的绑定接口会与spring中的   <property name="mapperLocations" value="classpath:com/miao/mapper/*.xml"/>    冲突-->
        <!--绑定接口-->
        <!--<mappers>
            <package name="com/miao/mapper"/>
        </mappers>-->
    
    </configuration>

    spring-dao.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:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop
            https://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx
            https://www.springframework.org/schema/tx/spring-tx.xsd
    ">
    
    
    
        <!--DataSources:使用Spring的数据源替换mybatis的配置-->
    
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;serverTimezone=UTC"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </bean>
    
        <!--SqlSessionFactory-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!--绑定mybatis-->
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
            <property name="mapperLocations" value="classpath:com/miao/mapper/*.xml"/>
        </bean>
    
        <!--SqlSessionTemplate是我们使用的sqlSession-->
        <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
            <!--只能用构造器注入sqlSession,因为他没有sqlSession-->
            <constructor-arg index="0" ref="sqlSessionFactory"/>
        </bean>
    
    
    
    
        <!--配置声明式事务-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
    
        <!--该配置保持了四个原则,原子,一致,隔离,。。。。-->
        <!--结合AOP实现事务的织入-->
        <!--配置事务的类-->
    
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <!--给方法配置事务-->
            <!--配置事务传播特性-->
            <tx:attributes>
                <tx:method name="add" propagation="REQUIRED"/>
                <tx:method name="delete" propagation="REQUIRED"/>
                <tx:method name="*" propagation="REQUIRED"/>
            </tx:attributes>
        </tx:advice>
    
        <!--配置事务切入-->
        <aop:config>
            <aop:pointcut id="txPointCut" expression="execution(* com.miao.mapper.*.*(..))"/>
            <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
        </aop:config>
    
    </beans>

    spring-dao.xml是事务配置的重点,包括四个原则性的方法,自动回滚等

    test.java

    import com.miao.mapper.UserMapper;
    import com.miao.pojo.User;
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import java.util.List;
    
    public class test {
        @Test
        public void test1()
        {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserMapper userMapper = context.getBean("userMapper",UserMapper.class);
            List<User> userList = userMapper.selectUser();
            for (User user : userList)
            {
                System.out.println(user);
            }
        }
        @Test
        public void test2()
        {
    
        }
    }

    查阅spring-mybatis使用手册学习http://mybatis.org/spring/zh/transactions.html

  • 相关阅读:
    (转)(mark)VM参数设置、分析
    用happen-before规则重新审视DCL(转)
    java synchronized的优化--偏向锁、轻量级锁、重量级锁
    leet_14 Longest Common Prefix
    leet_15
    leet_11
    Github-浅谈
    深究angularJS系列
    深究angularJS系列
    CSS编程框架
  • 原文地址:https://www.cnblogs.com/yizhixiaozhu/p/15634041.html
Copyright © 2011-2022 走看看