1. 程式人生 > >3.3.6 MyBatis事務管理

3.3.6 MyBatis事務管理

新增 sql 語句 led mybatis事務 工具 put lose 管理 數據庫操作

六、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();

}

3.3.6 MyBatis事務管理