解決myBatis中openSession()自動提交的問題
自動提交問題
跟著小破站視頻寫的代碼,卻發(fā)現(xiàn)我的插入操作自動提交了(視頻中需要手動提交);
猜測是myBatis中有設(shè)置為自動提交的方法,于是百度了一下,果然
myBatis中自動提交設(shè)置
openSession() 方法有帶參數(shù)為 autoCommit 的布爾值,即是否自動提交可以手動控制的。
- 當(dāng)openSession(true),即括號內(nèi)為true的時候,mybaits是可以自動提交修改后的數(shù)據(jù)的
- 當(dāng)openSession(),即括號內(nèi)為空(或false),為手動提交,需要最后調(diào)用 session.commit() 來完成數(shù)據(jù)更新操作
查完之后又看了一遍源碼,發(fā)現(xiàn)我寫的確實是openSession();里面并未添加true;然后又看了幾篇csdn上的攻略還是沒能解決問題
真實原因
最后想是不是MySQL的引擎問題呢,一開始我覺得應(yīng)該不是,因為創(chuàng)表的時候我特意改過表的引擎就是為了能進(jìn)行事務(wù)操作,所以應(yīng)該是沒問題的

emmmmm........ 不應(yīng)當(dāng)(暈)
然后看了我當(dāng)時寫的源碼:
ALTER TABLE salgrade ENGINE = InnoDb;

好吧,是我寫錯了(也不知道為啥這里我總寫錯,這個好像ALTER TABLE 這些要大寫,反正之前寫小寫不對),用了代碼提示里的表,表改錯了(暈),下次直接Navicat吧還是
最終解決方案
把t_student表的引擎改為InnoDB,就能解決問題了
MySQL的所有引擎中只有InnoDB支持事務(wù),別的都會自動提交,所以如果需要實現(xiàn)事務(wù)功能,務(wù)必保證表的引擎為InnoDB哦
更改默認(rèn)引擎
我百度了一下,說mysql-5.1版本之前默認(rèn)引擎是MyISAM,之后是innoDB,但是我的默認(rèn)卻是MyISAM,不知道為啥(也有可能是我百度錯了)
然后想著一勞永逸,直接把默認(rèn)引擎改了得了,過程也不復(fù)雜;
在配置文件my.ini中的找到default-storage-engine,此時默認(rèn)為MyISAM將等號后改為INNODB即可,當(dāng)然這要先重啟MySQL才能生效
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot整合log4j日志與HashMap的底層原理解析
這篇文章主要介紹了SpringBoot整合log4j日志與HashMap的底層原理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Java實現(xiàn)多個單張tif文件合并成一個多頁tif文件
Java Stream的基本概念以及創(chuàng)建方法
Java實現(xiàn)讀取文件夾下(包括子目錄)所有文件的文件名
Java 在Excel單元格中應(yīng)用一種/多種字體樣式(實例代碼)

