MyBatis詳解1.概述

字節(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();
    }
  1. 使用JDBC編程需要連接數(shù)據(jù)庫(kù),注冊(cè)驅(qū)動(dòng)和數(shù)據(jù)庫(kù)信息。
  2. 操作Connection,打開(kāi)Statement對(duì)象。
  3. 通過(guò)Statement執(zhí)行SQL,返回結(jié)果到ResultSet對(duì)象。
  4. 使用ResultSet讀取數(shù)據(jù)。
  5. 關(guān)閉數(shù)據(jù)庫(kù)相關(guān)資源。
傳統(tǒng)JDBC的弊端
  1. 工作量相對(duì)較大,我們需要先連接、處理JDBC底層事務(wù)、處理數(shù)據(jù)類型;還要操作Connection對(duì)象、Statement對(duì)象、Resultset對(duì)象去拿到數(shù)據(jù),并準(zhǔn)確關(guān)閉它們。
  2. 我們要對(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ì)
  1. 消除了代碼的映射規(guī)則,它全部被分離到了XML或者注解里面去配置。
  2. 無(wú)需再管理數(shù)據(jù)庫(kù)連接,它也配置在XML里面。
  3. 一個(gè)會(huì)話中,不要操作多個(gè)對(duì)象,只要操作 Session對(duì)象即可。
  4. 關(guān)閉資源只需要關(guān)閉一個(gè)Session便可。
Hibernate的不足
  1. 全表映射帶來(lái)的不便,比如更新時(shí)需要發(fā)送所有的字段。
  2. 無(wú)法根據(jù)不同的條件組裝不同的SQL。
  3. 對(duì)多表關(guān)聯(lián)和復(fù)雜SQL査詢支持較差,需要自己寫(xiě)SQL,返回后自己將數(shù)據(jù)組裝為POJO。
  4. 不能有效支持存儲(chǔ)過(guò)程。
  5. 雖然有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
  1. JDBC的方式在目前而言極少用到
  2. 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í)候使用。
  3. 如果你需要一個(gè)靈活的、可以動(dòng)態(tài)生成映射關(guān)系的框架,那么MyBatis確實(shí)是一個(gè)最好的選擇。它的缺陷是需要你提供映射規(guī)則和SQL,所以它的開(kāi)發(fā)工作量比Hibernate略大一些。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 Mybatis入門 1.1 單獨(dú)使用jdbc編程問(wèn)題總結(jié) 1.1.1 jdbc程序 上邊使...
    哇哈哈E閱讀 3,410評(píng)論 0 38
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥(niǎo)慢飛閱讀 6,217評(píng)論 0 4
  • 之前在面試工作的時(shí)候,我當(dāng)時(shí)用的是hibernate,但是現(xiàn)在互聯(lián)網(wǎng)項(xiàng)目并發(fā)量大,一般都會(huì)選擇使用Mybatis,...
    唐偉耀閱讀 593評(píng)論 1 0
  • 本文翻譯自 linux-load-averages,按照譯者理解有刪減 前言 經(jīng)常和Linux打交道的童鞋都知道,...
    大蟒傳奇閱讀 3,328評(píng)論 0 8
  • “一位公交司機(jī)感慨:天還沒(méi)亮,站臺(tái)上就有穿著校服的孩子們?cè)诘却卉?。就因?yàn)槲业能嚿蠑D滿了逛早市買菜、聽(tīng)健康講座的...
    無(wú)求品自高閱讀 1,189評(píng)論 2 8

友情鏈接更多精彩內(nèi)容