SpringBoot Mybatis 手動提交事務

1.數據庫配置文件 mybatis-config-only.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>
    <!--先加載基礎配置文件 主要是數據庫參數-->
    <!--<properties resource="application.properties"/>-->
    <!--設置-->
    <settings>
        <!-- 全局映射器啓用緩存 默認爲false -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 查詢時,關閉關聯對象即時加載以提高性能 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 設置關聯對象加載的形態,此處爲按需加載字段(加載字段由SQL指定),不會加載關聯表的所有字段,以提高性能 -->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!-- 對於未知的SQL查詢,允許返回不同的結果集以達到通用的效果 -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!-- 允許使用列標籤代替列名 -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 允許使用自定義的主鍵值(比如由程序生成的UUID 32位編碼作爲鍵值),數據表的PK生成策略將被覆蓋 -->
        <setting name="useGeneratedKeys" value="true"/>
        <!-- 給予被嵌套的resultMap以字段-屬性的映射支持 -->
        <setting name="autoMappingBehavior" value="FULL"/>
        <!-- 對於批量更新操作緩存SQL以提高性能  但是返回id有問題-->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!-- 數據庫超過36000秒仍未響應則超時 -->
        <setting name="defaultStatementTimeout" value="36000"/>
        <!-- 日誌使用logback實現 -->
        <!--<setting name="logPrefix" value="mybatis-log."/>-->
        <!--是否開啓自動駝峯命名規則(camel case)映射,即從經典數據庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似映射。 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <!--指定事務管理的類型,這裏簡單使用Java的JDBC的提交和回滾設置-->
            <transactionManager type="JDBC"/>
            <!--dataSource 指連接源配置,POOLED是JDBC連接對象的數據源連接池的實現-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://1.1.1.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--指定Mybatis SQL配置文件-->
        <mapper resource="com/produce/core/demo/mapper/xml/TestMapper.xml"/>
    </mappers>
</configuration>

2.Java工具類 MybatisUtil

public class MybatisUtil {
    public static SqlSession getSqlSession(){
        //加載配置文件
        //String resource = ResourceUtils.getFile("classpath:mybatis-config-only.xml").getPath();
        //將配置文件讀入字節流
        SqlSession session = null;
        try (InputStream is = Resources.getResourceAsStream("mybatis-config-only.xml")){
            //構建sqlSession工廠
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //獲取sqlSession
            session = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return session;
    }
}

3.數據庫操作

public void updateEmployeeInfo() {
	System.out.println("執行開始變更員工基本信息...");

	//獲取sqlSession
	SqlSession session = MybatisUtil.getSqlSession();
	//Mybatis SQL地址
	String statement = "com.produce.core.demo.mapper.TestMapper.selectEmployeeList";
	String statement1 = "com.produce.core.demo.mapper.TestMapper.updateEmployeeInfo";

	try{
		//查詢系統員工號集合
		List<String> list = session.selectList(statement);
		for(int i=0;i<list.size();i++){
			Map map = new HashMap();
			map.put("empCode",list.get(i));
			map.put("status","1");
			//根據員工號,更新員工信息
			session.update(statement1,map);
			//每更新一名員工,便手動提交一次事務
			session.commit(true);
		}
	}catch (Exception e){
		System.out.println("同步員工基本信息異常...");
		e.printStackTrace();
	}finally {
		session.close();
	}

	System.out.println("執行完畢變更員工基本信息...");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章