Spring 声明式事物

事物的ACID原则:

  • 原子性

  • 一致性

  • 隔离性

  • 持久性

 事物:

  1. 把一组业务当成一个业务,要么都成功,要么都失败

  2. 涉及数据一致性问题

  3. 确保完整性和一致性

 spring中的事务管理分为:

  • 声明式事物:AOP

  • 编程式事物:需要在代码中,进行事物的管理

今天主要学习声明式事物:

 在spring配置文件中配置生命是事物:

xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"

        http://www.springframework.org/schema/aop
        http://www.springframework.org/aop/tx/spring-aop.xsd
       http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
<!--配置声明式事物-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <constructor-arg ref="dataSource"/>
    </bean>
    <!--集合AOP实现事物的编入-->
    <!--配合事物通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!--给哪些方法配置失误-->
        <!--p配置事务的传播特性 propagation(传播) REQUIRED(默认选择)-->
        <tx:attributes>
            <tx:method name="add" propagation="REQUIRED"/>
            <tx:method name="delete" propagation="REQUIRED"/>
            <tx:method name="update" propagation="REQUIRED"/>
            <tx:method name="query" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <!--配置事物切入-->
    <aop:config>
        <!--mapper下的所有方法-->
        <aop:pointcut id="txPointCut" expression="execution(* com.ding.mapper.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
    </aop:config>

其他相关文件:

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"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd">

    <import resource="spring-dao.xml"/>
    <!--bean-->
    <bean id="userMapper" class="com.ding.mapper.UserMapperImpl">
        <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>

    <!--每一个mapper.xml都需要在mybatis核心配置文件中注册-->
    <typeAliases>
        <package name="com.ding.pojo"/>
    </typeAliases>
    <!-- 设置一般不整合 -->
    <!--<settings>
        <setting name="" value=""/>
    </settings>-->
</configuration>

UserMapper:

public interface UserMapper {
    public List<User> getUser();
    public int addUser(User user);
    public int deleteUser(int 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.ding.mapper.UserMapper">
    <select id="selectUser" resultType="com.ding.pojo.User">
        select * from user
    </select>
    <insert id="addUser" parameterType="com.ding.pojo.User">
        insert into user(id,name,pwd) values (#{id},#{name},#{pwd)
    </insert>
    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>

</mapper>

UserMapperImpl:

public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{
    @Override
    public List<User> getUser() {
        User user = new User(10,"dzl","123456");
        UserMapper mapper1 = getSqlSession().getMapper(UserMapper.class);
        mapper1.addUser(user);
        deleteUser(10);
        //在查询用户之前创建并删除一个用户
        UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
        return mapper.getUser();
    }

    @Override
    public int addUser(User user) {
        return getSqlSession().getMapper(UserMapper.class).addUser(user);
    }

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值