MyBatis詳解1.概述

字節(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();
    }
  1. 使用JDBC編程需要連接數(shù)據(jù)庫,注冊驅(qū)動和數(shù)據(jù)庫信息肉渴。
  2. 操作Connection公荧,打開Statement對象。
  3. 通過Statement執(zhí)行SQL同规,返回結(jié)果到ResultSet對象循狰。
  4. 使用ResultSet讀取數(shù)據(jù)。
  5. 關(guān)閉數(shù)據(jù)庫相關(guān)資源券勺。
傳統(tǒng)JDBC的弊端
  1. 工作量相對較大绪钥,我們需要先連接、處理JDBC底層事務(wù)关炼、處理數(shù)據(jù)類型程腹;還要操作Connection對象、Statement對象儒拂、Resultset對象去拿到數(shù)據(jù)寸潦,并準(zhǔn)確關(guān)閉它們色鸳。
  2. 我們要對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)勢
  1. 消除了代碼的映射規(guī)則氛雪,它全部被分離到了XML或者注解里面去配置。
  2. 無需再管理數(shù)據(jù)庫連接耸成,它也配置在XML里面报亩。
  3. 一個會話中,不要操作多個對象井氢,只要操作 Session對象即可弦追。
  4. 關(guān)閉資源只需要關(guān)閉一個Session便可。
Hibernate的不足
  1. 全表映射帶來的不便花竞,比如更新時需要發(fā)送所有的字段劲件。
  2. 無法根據(jù)不同的條件組裝不同的SQL。
  3. 對多表關(guān)聯(lián)和復(fù)雜SQL査詢支持較差约急,需要自己寫SQL零远,返回后自己將數(shù)據(jù)組裝為POJO。
  4. 不能有效支持存儲過程厌蔽。
  5. 雖然有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
  1. JDBC的方式在目前而言極少用到
  2. Hibernate作為較為流行的Java ORM框架攒磨,它確實編程簡易泳桦,需要我們提供映射的規(guī)則汤徽,完全可以通過IDE生成,同時無需編寫SQL確實開發(fā)效率優(yōu)于MyBatis灸撰。但他的上述介紹過的一些缺點谒府,注定了 Hibernate只適用于在場景不太復(fù)雜,要求性能不太苛刻的時候使用浮毯。
  3. 如果你需要一個靈活的完疫、可以動態(tài)生成映射關(guān)系的框架,那么MyBatis確實是一個最好的選擇债蓝。它的缺陷是需要你提供映射規(guī)則和SQL壳鹤,所以它的開發(fā)工作量比Hibernate略大一些。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饰迹,一起剝皮案震驚了整個濱河市芳誓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啊鸭,老刑警劉巖锹淌,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赠制,居然都是意外死亡赂摆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門钟些,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烟号,“玉大人,你說我怎么就攤上這事政恍∪旆” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵抚垃,是天一觀的道長喷楣。 經(jīng)常有香客問我,道長鹤树,這世上最難降的妖魔是什么铣焊? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮罕伯,結(jié)果婚禮上曲伊,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好坟募,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布岛蚤。 她就那樣靜靜地躺著,像睡著了一般懈糯。 火紅的嫁衣襯著肌膚如雪涤妒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天赚哗,我揣著相機(jī)與錄音她紫,去河邊找鬼。 笑死屿储,一個胖子當(dāng)著我的面吹牛贿讹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播够掠,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼民褂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疯潭?” 一聲冷哼從身側(cè)響起赊堪,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袁勺,沒想到半個月后雹食,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡期丰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年群叶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钝荡。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡街立,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出埠通,到底是詐尸還是另有隱情赎离,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布端辱,位于F島的核電站梁剔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舞蔽。R本人自食惡果不足惜荣病,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渗柿。 院中可真熱鬧个盆,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至终惑,卻和暖如春绍在,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狠鸳。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工揣苏, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留悯嗓,地道東北人件舵。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像脯厨,于是被迫代替她去往敵國和親铅祸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1 Mybatis入門 1.1 單獨(dú)使用jdbc編程問題總結(jié) 1.1.1 jdbc程序 上邊使...
    哇哈哈E閱讀 3,295評論 0 38
  • 1. 簡介 1.1 什么是 MyBatis 合武? MyBatis 是支持定制化 SQL临梗、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,453評論 0 4
  • 之前在面試工作的時候,我當(dāng)時用的是hibernate稼跳,但是現(xiàn)在互聯(lián)網(wǎng)項目并發(fā)量大盟庞,一般都會選擇使用Mybatis,...
    唐偉耀閱讀 550評論 1 0
  • 本文翻譯自 linux-load-averages,按照譯者理解有刪減 前言 經(jīng)常和Linux打交道的童鞋都知道汤善,...
    大蟒傳奇閱讀 3,193評論 0 8
  • “一位公交司機(jī)感慨:天還沒亮什猖,站臺上就有穿著校服的孩子們在等待公交車。就因為我的車上擠滿了逛早市買菜红淡、聽健康講座的...
    無求品自高閱讀 1,086評論 2 8