字節(jié)跳動飛書內(nèi)推!
北京大刊、杭州为迈、武漢、廣州缺菌、深圳葫辐、上海,六大城市等你來投伴郁。
感興趣的朋友可以私我咨詢&內(nèi)推耿战,也可以通過鏈接直接投遞!
海量HC焊傅,極速響應(yīng)剂陡,快來和我成為同事吧。
今日頭條狐胎、抖音鸭栖、Tik Tok也可以內(nèi)推~
點擊進(jìn)入我的博客
MyBatis詳解1.概述
MyBatis詳解2.MyBatis使用入門
MyBatis詳解3.MyBatis配置詳解
MyBatis詳解4.映射器Mapper
MyBatis詳解5.動態(tài)SQL
MyBatis詳解6.MyBatis技術(shù)內(nèi)幕
MyBatis詳解7.插件
MyBatis詳解8.集成Spring
1 JDBC編程
什么是JDBC
- Java程序都是通過JDBC(Java Data Base Connectivity)連接數(shù)據(jù)庫的,這樣我們就可以通過SQL對數(shù)據(jù)庫編程握巢。
- JDBC是由SUN公司提出的一系列規(guī)范纤泵,但是它只定義了接口規(guī)范,而具體的實現(xiàn)是交由各個數(shù)據(jù)庫廠商去實現(xiàn)的镜粤,因為每個數(shù)據(jù)庫都有其特殊性捏题,所以JBC就是一種典型的橋接模式。
JDBC編程過程
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ù)庫,注冊驅(qū)動和數(shù)據(jù)庫信息肉渴。
- 操作Connection公荧,打開Statement對象。
- 通過Statement執(zhí)行SQL同规,返回結(jié)果到ResultSet對象循狰。
- 使用ResultSet讀取數(shù)據(jù)。
- 關(guān)閉數(shù)據(jù)庫相關(guān)資源券勺。
傳統(tǒng)JDBC的弊端
- 工作量相對較大绪钥,我們需要先連接、處理JDBC底層事務(wù)关炼、處理數(shù)據(jù)類型程腹;還要操作Connection對象、Statement對象儒拂、Resultset對象去拿到數(shù)據(jù)寸潦,并準(zhǔn)確關(guān)閉它們色鸳。
- 我們要對JDBC編程可能產(chǎn)生的異常進(jìn)行捕捉處理并正確關(guān)閉資源。
2 什么是ORM
ORM(Object Relational Mapping见转,對象關(guān)系映射)模型就是數(shù)據(jù)庫的表和簡單Java對象(POJO)的映射關(guān)系模型命雀,它主要解決數(shù)據(jù)庫數(shù)據(jù)和POJO對象的相互映射。通過這層映射關(guān)系就可以簡單迅速地把數(shù)據(jù)庫表的數(shù)據(jù)轉(zhuǎn)化為POJO斩箫,以便程序員更加容易理解和應(yīng)用Java程序
ORM映射模型
3 Hibernate
Hibernate是建立在若干POJO通過XML映射文件(或注解)提供的規(guī)則映射到數(shù)據(jù)庫表上的吏砂。換句話說,我們可以通過POJO直接操作數(shù)據(jù)庫的數(shù)據(jù)乘客。它提供的是一種全表映射的模型赊抖,使用者不需要編寫SQL語言,只要使用HQL語言(Hibernate Query Langurage)就可以了寨典。
image.png
Hibernate的優(yōu)勢
- 消除了代碼的映射規(guī)則氛雪,它全部被分離到了XML或者注解里面去配置。
- 無需再管理數(shù)據(jù)庫連接耸成,它也配置在XML里面报亩。
- 一個會話中,不要操作多個對象井氢,只要操作 Session對象即可弦追。
- 關(guān)閉資源只需要關(guān)閉一個Session便可。
Hibernate的不足
- 全表映射帶來的不便花竞,比如更新時需要發(fā)送所有的字段劲件。
- 無法根據(jù)不同的條件組裝不同的SQL。
- 對多表關(guān)聯(lián)和復(fù)雜SQL査詢支持較差约急,需要自己寫SQL零远,返回后自己將數(shù)據(jù)組裝為POJO。
- 不能有效支持存儲過程厌蔽。
- 雖然有HQL牵辣,但是性能較差,大型互聯(lián)網(wǎng)系統(tǒng)往往需要優(yōu)化SQL奴饮,而Hibernate做不到纬向。
4 MyBatis
為了解決 Hibernate的不足,一個半自動映射的框架MyBatis應(yīng)運(yùn)而生戴卜。
什么是半自動
- MyBatis之所以是半自動的逾条,是因為它需要手工匹配提供POJO、SQL和映射關(guān)系投剥,而全表映射的Hibernate只需要提供POJO和映射關(guān)系便可师脂。
- MyBatis所需要提供的映射文件包含以下三個部分:SQL、映射規(guī)則、POJO危彩。
MyBatis的ORM映射模型
什么時候用MyBatis
- JDBC的方式在目前而言極少用到
- Hibernate作為較為流行的Java ORM框架攒磨,它確實編程簡易泳桦,需要我們提供映射的規(guī)則汤徽,完全可以通過IDE生成,同時無需編寫SQL確實開發(fā)效率優(yōu)于MyBatis灸撰。但他的上述介紹過的一些缺點谒府,注定了 Hibernate只適用于在場景不太復(fù)雜,要求性能不太苛刻的時候使用浮毯。
- 如果你需要一個靈活的完疫、可以動態(tài)生成映射關(guān)系的框架,那么MyBatis確實是一個最好的選擇债蓝。它的缺陷是需要你提供映射規(guī)則和SQL壳鹤,所以它的開發(fā)工作量比Hibernate略大一些。