解決myBatis中openSession()自動(dòng)提交的問(wèn)題
自動(dòng)提交問(wèn)題
跟著小破站視頻寫(xiě)的代碼,卻發(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() 來(lái)完成數(shù)據(jù)更新操作
查完之后又看了一遍源碼,發(fā)現(xiàn)我寫(xiě)的確實(shí)是openSession();里面并未添加true;然后又看了幾篇csdn上的攻略還是沒(méi)能解決問(wèn)題
真實(shí)原因
最后想是不是MySQL的引擎問(wèn)題呢,一開(kāi)始我覺(jué)得應(yīng)該不是,因?yàn)閯?chuàng)表的時(shí)候我特意改過(guò)表的引擎就是為了能進(jìn)行事務(wù)操作,所以應(yīng)該是沒(méi)問(wèn)題的

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

好吧,是我寫(xiě)錯(cuò)了(也不知道為啥這里我總寫(xiě)錯(cuò),這個(gè)好像ALTER TABLE 這些要大寫(xiě),反正之前寫(xiě)小寫(xiě)不對(duì)),用了代碼提示里的表,表改錯(cuò)了(暈),下次直接Navicat吧還是
最終解決方案
把t_student表的引擎改為InnoDB,就能解決問(wèn)題了
MySQL的所有引擎中只有InnoDB支持事務(wù),別的都會(huì)自動(dòng)提交,所以如果需要實(shí)現(xiàn)事務(wù)功能,務(wù)必保證表的引擎為InnoDB哦
更改默認(rèn)引擎
我百度了一下,說(shuō)mysql-5.1版本之前默認(rèn)引擎是MyISAM,之后是innoDB,但是我的默認(rèn)卻是MyISAM,不知道為啥(也有可能是我百度錯(cuò)了)
然后想著一勞永逸,直接把默認(rèn)引擎改了得了,過(guò)程也不復(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)文章
SpringBoot整合log4j日志與HashMap的底層原理解析
這篇文章主要介紹了SpringBoot整合log4j日志與HashMap的底層原理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Java實(shí)現(xiàn)多個(gè)單張tif文件合并成一個(gè)多頁(yè)tif文件
Java Stream的基本概念以及創(chuàng)建方法
Java實(shí)現(xiàn)讀取文件夾下(包括子目錄)所有文件的文件名
Java 在Excel單元格中應(yīng)用一種/多種字體樣式(實(shí)例代碼)

