App下載

w3cschool小編帶你了解mybatis

猿友 2021-01-09 16:57:45 瀏覽數(shù) (3039)
反饋

什么是mybatis:

Mybatis本質(zhì)是一種半自動(dòng)化的ORM框架,前身是ibatis,除了要pojo和映射關(guān)系之外,還需要些sql語(yǔ)句。

怎么看待ORM框架:

處理矛盾的,java程序員喜歡面向?qū)ο箝_(kāi)發(fā)和面向接口開(kāi)發(fā),而數(shù)據(jù)庫(kù)是一張張表和一個(gè)個(gè)庫(kù)組成的,這兩者的關(guān)系很難調(diào)和,而關(guān)系型映射解決了這一個(gè)問(wèn)題。

Mybatis映射文件三要素:

  • SQL;
  • 映射規(guī)則;
  • Pojo。

為什么要用mybatis而不用hibernate?

在我們互聯(lián)網(wǎng)的環(huán)境里面, 我們經(jīng)常要面對(duì)海量數(shù)據(jù),所以我們要基于底層的調(diào)優(yōu)能力,就是sql語(yǔ)句。而hibernate生成的sql語(yǔ)句很不透明。

Mybatis核心流程三大階段:

  • 初始化階段,讀取XML配置文件和注解中的配置信息,創(chuàng)建解析對(duì)象,并完成各個(gè)模塊的初始化工作。就是把我們的配置文件加載到內(nèi)存里面去。在sqlSession初始化的時(shí)候加載到內(nèi)存中去的;
  • 代理階段,封裝iBatis的編程模型,使用mapper接口開(kāi)發(fā)的初始化工作;
  • 數(shù)據(jù)讀寫階段,通過(guò)SqlSession完成SQL的解析,參數(shù)的映射,SQL的執(zhí)行,結(jié)果的反射解析過(guò)程。

SqlSession

SqlSession意味著創(chuàng)建數(shù)據(jù)庫(kù)會(huì)話,代表了一次與數(shù)據(jù)庫(kù)的連接;

是mybatis對(duì)外提供數(shù)據(jù)訪問(wèn)的主要API;

實(shí)際上SqlSession的功能都是基于Excutor來(lái)實(shí)現(xiàn)的。

Mybatis的兩種編程模型Mybatis封裝了ibatis編程模型,使用sqlsession對(duì)外提供數(shù)據(jù)庫(kù)的訪問(wèn)。還有一種是使用mapper接口編程,就可以訪問(wèn)數(shù)據(jù)庫(kù)

Mybatis和ibatis的區(qū)別

Mybatis前身是ibatis的,ibatis之前是Apache旗下的產(chǎn)品,后來(lái)到了谷歌旗下,但是谷歌發(fā)現(xiàn)ibatis實(shí)現(xiàn)起來(lái)很麻煩,還需要維護(hù)靜態(tài)變量,并且沒(méi)有業(yè)務(wù)含義。所以谷歌改成了mybatis,通過(guò)面向接口的方式,讓所有代碼有了業(yè)務(wù)含義,屏蔽掉了底層代碼的復(fù)雜性。

為什么使用mapper接口就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)了呢?

其實(shí)最后它還是轉(zhuǎn)成了底層的ibatis執(zhí)行方法,它會(huì)使用配置文件解讀+動(dòng)態(tài)代理, 找到session中的對(duì)應(yīng)方法執(zhí)行,找到方法的命名空間和方法名。傳遞參數(shù)。

業(yè)務(wù)流程還是首先要實(shí)例化sqlssessionFactory,加載數(shù)據(jù)庫(kù)配置文件以及mapper.xml到configuration對(duì)象。然后獲取sqlsession對(duì)象。然后通過(guò)動(dòng)態(tài)代理跨越面向接口編程和ibatis編程的鴻溝,最后遵循jdbc的規(guī)范,通過(guò)底層的四大對(duì)象合作完成功能。

推薦好課:

Mybatis3.x從入門到精通

MyBatis 教程

Mybatis常見(jiàn)面試題


0 人點(diǎn)贊