解決myBatis中openSession()自動(dòng)提交的問題
自動(dòng)提交問題
跟著小破站視頻寫的代碼,卻發(fā)現(xiàn)我的插入操作自動(dòng)提交了(視頻中需要手動(dòng)提交);
猜測(cè)是myBatis中有設(shè)置為自動(dòng)提交的方法,于是百度了一下,果然
myBatis中自動(dòng)提交設(shè)置
openSession() 方法有帶參數(shù)為 autoCommit 的布爾值,即是否自動(dòng)提交可以手動(dòng)控制的。
- 當(dāng)openSession(true),即括號(hào)內(nèi)為true的時(shí)候,mybaits是可以自動(dòng)提交修改后的數(shù)據(jù)的
- 當(dāng)openSession(),即括號(hào)內(nèi)為空(或false),為手動(dòng)提交,需要最后調(diào)用 session.commit() 來完成數(shù)據(jù)更新操作
查完之后又看了一遍源碼,發(fā)現(xiàn)我寫的確實(shí)是openSession();里面并未添加true;然后又看了幾篇csdn上的攻略還是沒能解決問題
真實(shí)原因
最后想是不是MySQL的引擎問題呢,一開始我覺得應(yīng)該不是,因?yàn)閯?chuàng)表的時(shí)候我特意改過表的引擎就是為了能進(jìn)行事務(wù)操作,所以應(yīng)該是沒問題的
emmmmm........ 不應(yīng)當(dāng)(暈)
然后看了我當(dāng)時(shí)寫的源碼:
ALTER TABLE salgrade ENGINE = InnoDb;
好吧,是我寫錯(cuò)了(也不知道為啥這里我總寫錯(cuò),這個(gè)好像ALTER TABLE 這些要大寫,反正之前寫小寫不對(duì)),用了代碼提示里的表,表改錯(cuò)了(暈),下次直接Navicat吧還是
最終解決方案
把t_student表的引擎改為InnoDB,就能解決問題了
MySQL的所有引擎中只有InnoDB支持事務(wù),別的都會(huì)自動(dòng)提交,所以如果需要實(shí)現(xiàn)事務(wù)功能,務(wù)必保證表的引擎為InnoDB哦
更改默認(rèn)引擎
我百度了一下,說mysql-5.1版本之前默認(rèn)引擎是MyISAM,之后是innoDB,但是我的默認(rèn)卻是MyISAM,不知道為啥(也有可能是我百度錯(cuò)了)
然后想著一勞永逸,直接把默認(rèn)引擎改了得了,過程也不復(fù)雜;
在配置文件my.ini
中的找到default-storage-engine
,此時(shí)默認(rèn)為MyISAM
將等號(hào)后改為INNODB
即可,當(dāng)然這要先重啟MySQL才能生效
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基于注解實(shí)現(xiàn)的鎖實(shí)例解析
這篇文章主要介紹了Java基于注解實(shí)現(xiàn)的鎖實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02SpringBoot整合達(dá)夢(mèng)數(shù)據(jù)庫的教程詳解
這篇文章主要給大家介紹了SpringBoot整合達(dá)夢(mèng)數(shù)據(jù)庫的詳細(xì)教程,文章中有詳細(xì)的圖片介紹和代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2023-08-08Java通過word模板實(shí)現(xiàn)創(chuàng)建word文檔報(bào)告
這篇文章主要為大家詳細(xì)介紹了Java如何通過word模板實(shí)現(xiàn)創(chuàng)建word文檔報(bào)告的教程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-09-09Java數(shù)據(jù)結(jié)構(gòu)之鏈表詳解
本篇文章我們將講解一種新型的數(shù)據(jù)結(jié)構(gòu)—鏈表,鏈表是一種使用廣泛的通用數(shù)據(jù)結(jié)構(gòu),它可以用來作為實(shí)現(xiàn)棧,隊(duì)列等數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ).文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-05-05