字節(jié)跳動(dòng)飛書(shū)內(nèi)推!
北京、杭州、武漢、廣州、深圳、上海,六大城市等你來(lái)投。
感興趣的朋友可以私我咨詢&內(nèi)推,也可以通過(guò)鏈接直接投遞!
海量HC,極速響應(yīng),快來(lái)和我成為同事吧。
今日頭條、抖音、Tik Tok也可以內(nèi)推~
點(diǎn)擊進(jìn)入我的博客
MyBatis詳解1.概述
MyBatis詳解2.MyBatis使用入門
MyBatis詳解3.MyBatis配置詳解
MyBatis詳解4.映射器Mapper
MyBatis詳解5.動(dòng)態(tài)SQL
MyBatis詳解6.MyBatis技術(shù)內(nèi)幕
MyBatis詳解7.插件
MyBatis詳解8.集成Spring
1 JDBC編程
什么是JDBC
- Java程序都是通過(guò)JDBC(Java Data Base Connectivity)連接數(shù)據(jù)庫(kù)的,這樣我們就可以通過(guò)SQL對(duì)數(shù)據(jù)庫(kù)編程。
- JDBC是由SUN公司提出的一系列規(guī)范,但是它只定義了接口規(guī)范,而具體的實(shí)現(xiàn)是交由各個(gè)數(shù)據(jù)庫(kù)廠商去實(shí)現(xiàn)的,因?yàn)槊總€(gè)數(shù)據(jù)庫(kù)都有其特殊性,所以JBC就是一種典型的橋接模式。
JDBC編程過(guò)程
public void func() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
Connection connection = DriverManager.getConnection(url, username, null);
PreparedStatement ps = connection.prepareStatement("SELECT * FROM tb_name LIMIT 1");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println("Id = " + rs.getString("id") + " Name = " + rs.getString("name"));
}
rs.close();
ps.close();
connection.close();
}
- 使用JDBC編程需要連接數(shù)據(jù)庫(kù),注冊(cè)驅(qū)動(dòng)和數(shù)據(jù)庫(kù)信息。
- 操作Connection,打開(kāi)Statement對(duì)象。
- 通過(guò)Statement執(zhí)行SQL,返回結(jié)果到ResultSet對(duì)象。
- 使用ResultSet讀取數(shù)據(jù)。
- 關(guān)閉數(shù)據(jù)庫(kù)相關(guān)資源。
傳統(tǒng)JDBC的弊端
- 工作量相對(duì)較大,我們需要先連接、處理JDBC底層事務(wù)、處理數(shù)據(jù)類型;還要操作Connection對(duì)象、Statement對(duì)象、Resultset對(duì)象去拿到數(shù)據(jù),并準(zhǔn)確關(guān)閉它們。
- 我們要對(duì)JDBC編程可能產(chǎn)生的異常進(jìn)行捕捉處理并正確關(guān)閉資源。
2 什么是ORM
ORM(Object Relational Mapping,對(duì)象關(guān)系映射)模型就是數(shù)據(jù)庫(kù)的表和簡(jiǎn)單Java對(duì)象(POJO)的映射關(guān)系模型,它主要解決數(shù)據(jù)庫(kù)數(shù)據(jù)和POJO對(duì)象的相互映射。通過(guò)這層映射關(guān)系就可以簡(jiǎn)單迅速地把數(shù)據(jù)庫(kù)表的數(shù)據(jù)轉(zhuǎn)化為POJO,以便程序員更加容易理解和應(yīng)用Java程序

ORM映射模型
3 Hibernate
Hibernate是建立在若干POJO通過(guò)XML映射文件(或注解)提供的規(guī)則映射到數(shù)據(jù)庫(kù)表上的。換句話說(shuō),我們可以通過(guò)POJO直接操作數(shù)據(jù)庫(kù)的數(shù)據(jù)。它提供的是一種全表映射的模型,使用者不需要編寫(xiě)SQL語(yǔ)言,只要使用HQL語(yǔ)言(Hibernate Query Langurage)就可以了。

image.png
Hibernate的優(yōu)勢(shì)
- 消除了代碼的映射規(guī)則,它全部被分離到了XML或者注解里面去配置。
- 無(wú)需再管理數(shù)據(jù)庫(kù)連接,它也配置在XML里面。
- 一個(gè)會(huì)話中,不要操作多個(gè)對(duì)象,只要操作 Session對(duì)象即可。
- 關(guān)閉資源只需要關(guān)閉一個(gè)Session便可。
Hibernate的不足
- 全表映射帶來(lái)的不便,比如更新時(shí)需要發(fā)送所有的字段。
- 無(wú)法根據(jù)不同的條件組裝不同的SQL。
- 對(duì)多表關(guān)聯(lián)和復(fù)雜SQL査詢支持較差,需要自己寫(xiě)SQL,返回后自己將數(shù)據(jù)組裝為POJO。
- 不能有效支持存儲(chǔ)過(guò)程。
- 雖然有HQL,但是性能較差,大型互聯(lián)網(wǎng)系統(tǒng)往往需要優(yōu)化SQL,而Hibernate做不到。
4 MyBatis
為了解決 Hibernate的不足,一個(gè)半自動(dòng)映射的框架MyBatis應(yīng)運(yùn)而生。
什么是半自動(dòng)
- MyBatis之所以是半自動(dòng)的,是因?yàn)樗枰止てヅ涮峁㏄OJO、SQL和映射關(guān)系,而全表映射的Hibernate只需要提供POJO和映射關(guān)系便可。
- MyBatis所需要提供的映射文件包含以下三個(gè)部分:SQL、映射規(guī)則、POJO。

MyBatis的ORM映射模型
什么時(shí)候用MyBatis
- JDBC的方式在目前而言極少用到
- Hibernate作為較為流行的Java ORM框架,它確實(shí)編程簡(jiǎn)易,需要我們提供映射的規(guī)則,完全可以通過(guò)IDE生成,同時(shí)無(wú)需編寫(xiě)SQL確實(shí)開(kāi)發(fā)效率優(yōu)于MyBatis。但他的上述介紹過(guò)的一些缺點(diǎn),注定了 Hibernate只適用于在場(chǎng)景不太復(fù)雜,要求性能不太苛刻的時(shí)候使用。
- 如果你需要一個(gè)靈活的、可以動(dòng)態(tài)生成映射關(guān)系的框架,那么MyBatis確實(shí)是一個(gè)最好的選擇。它的缺陷是需要你提供映射規(guī)則和SQL,所以它的開(kāi)發(fā)工作量比Hibernate略大一些。