标签:
应用场景:
实际的业务场景为:设置用户默认地址操作,一个用户有只能有一个默认地址,用户在多个地址中只能选择一个,表中的字段是is_default,所以当用户设置默认地址的时候,实际的执行的sql为:
update user_address set is_default=0,update_at=now() where user_id=#{user_id} and is_default=1 update user_address set is_default=1,update_at=now() where user_id=#{user_id} and address_id=#{address_id}
我使用user表来模拟此操作:我们假定用户表中的age字段值只有一个能为1,其他都为0,当设置某个用户的age=1是,要将其他为1的重置为0。
@Test public void test_tranc() { int id = 2; SqlSession session = MybatisUtil.instance.getSqlSessionFactoryW().openSession(); Map<Object, Object> map = new HashMap<>(); map.put("id", id); try { session.update("user!update_user_default_reset", map); session.update("user!update_user_default_set", map); session.commit(); } catch (Exception e) { System.out.println(" 事务回滚....."); session.rollback();// 事务回滚 e.printStackTrace(); } finally { session.close(); } System.out.println(">> 更新完成。"); }
配置文件:
<?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="bean.domain.UserEntity"> <resultMap id="BaseResultMap" type="bean.domain.UserEntity"> <id column="id" property="id" jdbcType="INTEGER" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="age" property="age" jdbcType="INTEGER" /> </resultMap> <sql id="Base_Column_List"> id, name, age </sql> <!-- ===============================事务====================================== --> <update id="user!update_user_default_reset" parameterType="map"> update user set age = 0 where age = 1; </update> <update id="user!update_user_default_set" parameterType="map"> update user set age = 1 where id = #{id} </update> </mapper>
标签:
原文地址:http://www.cnblogs.com/zhoulf/p/5025787.html