3.3.6 MyBatis事务管理

六、MyBatis事务管理

1.  事务(Transaction)

(1) 事务是数据库操作的最小单元, 有 ACID 的特性. 应该保证一个事务的的 SQL 语句要么同时成功, 要么都不成功.

(2) MyBatis 中配置了事务管理器, type 属性设置为 JDBC.表示 MyBatis 采用和原生 JDBC 相同的事务管理机制.

(3)  MyBatis 执行的开始时, 将自动提交功能关闭了 . 所以,在执行 DML 操作时, 需要手动提交事务.

2. 简单提取工具类

package com.bjsxt.util;

import java.io.IOException;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {

private static SqlSessionFactory factory = null;

static {

try {

InputStream is =

Resources. getResourceAsStream("mybatis-cfg.xml");

factory = new SqlSessionFactoryBuilder().build(is);

} catch (IOException e) {

e.printStackTrace();

}

}

public static SqlSession getSession() {

SqlSession session = null;

if (factory != null) {

// true表示开启自动提交

// session = factory.openSession(true);

   session = factory.openSession();

}

return session;

}

}

 

3. 新增(insert)

mapper 文件中 , 通过<insert>定义新增语句. 注意, 由于DML 操 作 的 返 回 值 都 是 int 类 型 , 所 以 , 不 需 要 定 义resultType 属性.

<!-- 新增 -->

<insert id="insUser" parameterType="user">

insert into t_user values (default, #{username}, #{password})

</insert>

@Test

public void testIns() {

SqlSession session = MyBatisUtil. getSession();

User user = new User();

user.setUsername(" 小明");

user.setPassword("123");

int num = session. insert("com.bjsxt.mapper.UserMapper.insUser",

user);

if(num > 0) {

// 提交事务

session.commit();

System. out.println("SUCCESS!");

} else {

// 回滚事务

session.rollback();

System. out.println("FAILED!");

}

// 关闭资源

session.close();

}

猜你喜欢

转载自www.cnblogs.com/kendyho/p/10812725.html
今日推荐