真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

手寫Mybatis,徹底搞懂框架原理-創(chuàng)新互聯(lián)

mybatis的前身是iBatis,其源于“Internet”和“abatis”的組合,是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射。mybatis避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集,它可以使用簡單的XML或注解來配置和映射原生信息,將接口和Java的POJO映射成數(shù)據(jù)庫中的記錄。
手寫Mybatis,徹底搞懂框架原理

專業(yè)從事成都網(wǎng)站制作、網(wǎng)站建設(shè),高端網(wǎng)站制作設(shè)計(jì),微信小程序,網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠服務(wù),采用H5場景定制+CSS3前端渲染技術(shù),成都響應(yīng)式網(wǎng)站建設(shè)公司,讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動(dòng),隨時(shí)提供解決方案,暢聊想法和感受。

Mybatis的架構(gòu)設(shè)計(jì)
手寫Mybatis,徹底搞懂框架原理
Mybatis的功能架構(gòu)分為三層:

  • 接口層:提供給外部使用的接口API,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫。接口層接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。
  • 數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作。
  • 框架支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。
  • mybatis的運(yùn)行流程
    手寫Mybatis,徹底搞懂框架原理
    1.加載配置:配置來源于兩個(gè)地方,配置文件和注解。將SQL的配置信息加載成為MappedStatement對象(包括了傳入?yún)?shù)映射配置、執(zhí)行的SQL語句、結(jié)果映射配置),存儲在內(nèi)存中。
    2.SQL解析:當(dāng)API接口層接收到調(diào)用請求時(shí),會接收到傳入SQL的ID和傳入對象(可以是Map、JavaBean或者基本數(shù)據(jù)類型),Mybatis會根據(jù)SQL的ID找到對應(yīng)的MappedStatement,然后根據(jù)傳入?yún)?shù)對象對MappedStatement進(jìn)行解析,解析后可以得到最終要執(zhí)行的SQL語句和參數(shù)。
    3.SQL執(zhí)行:將最終得到的SQL和參數(shù)拿到數(shù)據(jù)庫進(jìn)行執(zhí)行,得到操作數(shù)據(jù)庫的結(jié)果。
    4.結(jié)果映射:將操作數(shù)據(jù)庫的結(jié)果按照映射的配置進(jìn)行轉(zhuǎn)換,可以轉(zhuǎn)換成HashMap、JavaBean或者基本數(shù)據(jù)類型,并將最終結(jié)果返回。
    手寫mybatis的目錄
    來看下筆者的手寫mybatis的文件目錄。查看Bootstrap文件上說明,然后運(yùn)行該文件,斷點(diǎn)調(diào)試即可一步步了解mybatis框架的原理了。(很多地方都注解了,方便初學(xué)者更多了解框架細(xì)節(jié))

代碼地址請查看,https://github.com/y277an/java-you-need-know。再看看正版的代碼結(jié)構(gòu)吧。
手寫Mybatis,徹底搞懂框架原理

考慮到transaction對理解框架原理產(chǎn)生干擾,所以代碼全部刪掉

mybatis目錄結(jié)構(gòu)及內(nèi)容
以下目錄對照的是mybatis-3.5.1的源碼。

  • annotations。注解目錄。包括所有的注解,如@SELECT,@UPDATE等。
  • binding。Mapper類的實(shí)例反射生成工具目錄。
  • builder。主要是注解,mapper和SqlSource的構(gòu)造器及轉(zhuǎn)換器。
  • cache。Mybatis內(nèi)部緩存接口。實(shí)現(xiàn)了一些特定的緩存策略,F(xiàn)ifoCache、LruCache、BlockingCache、LoggingCache等。
  • dataSource。數(shù)據(jù)源工廠類及實(shí)現(xiàn)。實(shí)現(xiàn)類包括JndiDataSourceFactory、PooledDataSourceFactory和UnpooledDataSourceFactory。數(shù)據(jù)源實(shí)現(xiàn)類:UnpooledDataSource和PooledDataSource。
  • exceptions。Mybatis自定義的異常類,都繼承自RuntimeException。
  • executor。執(zhí)行器相關(guān)包。包括Key生成器、加載器(包括Cglib、Javassist的代理,結(jié)果加載器)、參數(shù)處理器接口、結(jié)果處理器、結(jié)果集(resultSet)處理器、Statement處理器(實(shí)現(xiàn)類:BaseStatementHandler、CallableStatementHandler、PreparedStatementHandler、RoutingStatementHandler、SimpleStatementHandler)、執(zhí)行器(SimpleExecutor、ReuseExecutor、CachingExecutor、BatchExecutor、BaseExecutor)。
  • io。主要是定義的幾個(gè)VFS(VFS、DefaultVFS、ClassLoaderWrapper)。
  • jdbc。與Sql相關(guān)的操作。如Sql運(yùn)行器,腳本運(yùn)行器和Sql封裝類等。
  • logging。各個(gè)類型的日志適配器,都實(shí)現(xiàn)了Log接口。StdOutImpl、Slf4jImpl、NoLoggingImpl、Log4j2Impl、Log4jImpl、Jdk14LoggingImpl、BaseJdbcLogger和JakartaCommonsLoggingImpl。
  • mapping。主要是接口參數(shù),sql和返回結(jié)果的映射類,主要類包括:MappedStatement、ParameterMap、ParameterMapping、ResultMap、ResultMapping、BoundSql和SqlSource等類。
  • parsing。變量解析,如解析${},#{}等。
  • plugin。主要包含插件的定義接口。如Interceptor、Plugin和InterceptorChain等。
  • reflection。主要是一些反射操作的工具方法和對象工廠類,以及一些常用的包裝類,如BaseWrapper、BeanWrapper、CollectionWrapper、MapWrapper和ObjectWrapper。
  • scripting。執(zhí)行驅(qū)動(dòng)和動(dòng)態(tài)Sql解析的處理器。
  • session。主要是SqlSession和SqlSessionFactory。
  • transaction。主要是mybatis簡單封裝的jdbc事務(wù)操作類。
  • type。各個(gè)類型數(shù)據(jù)的處理器。用于動(dòng)態(tài)的設(shè)置參數(shù)和轉(zhuǎn)換數(shù)據(jù),如IntegerTypeHandler用來處理Integer類型的值的set和get操作。除了八大基本類型,還有常用的集合及Map類型,還增加了各種時(shí)間類型的處理器。
    MyBatis的核心成員和職責(zé)
    從MyBatis代碼實(shí)現(xiàn)的角度來看,MyBatis的核心組件如下
  • SqlSession。作為MyBatis工作的主要頂層API,表示和數(shù)據(jù)庫交互的會話,完成必要數(shù)據(jù)庫增刪改查功能。
  • Executor。MyBatis執(zhí)行器,是MyBatis調(diào)度的核心,負(fù)責(zé)SQL語句的生成和查詢緩存的維護(hù)。
  • StatementHandler。封裝了JDBC Statement操作,負(fù)責(zé)對JDBCstatement的操作,如設(shè)置參數(shù)、將Statement結(jié)果集轉(zhuǎn)換成List集合。
  • ParameterHandler。負(fù)責(zé)對用戶傳遞的參數(shù)轉(zhuǎn)換成JDBC Statement 所需要的參數(shù)。
  • ResultSetHandler。負(fù)責(zé)將JDBC返回的ResultSet結(jié)果集對象轉(zhuǎn)換成List類型的集合。
  • TypeHandler 負(fù)責(zé)java數(shù)據(jù)類型和jdbc數(shù)據(jù)類型之間的映射和轉(zhuǎn)換。
  • MappedStatement。MappedStatement維護(hù)了一條節(jié)點(diǎn)的封裝。
  • SqlSource。負(fù)責(zé)根據(jù)用戶傳遞的parameterObject,動(dòng)態(tài)地生成SQL語句,將信息封裝到BoundSql對象中,并返回。
  • BoundSql。表示動(dòng)態(tài)生成的SQL語句以及相應(yīng)的參數(shù)信息。
  • Configuration。MyBatis所有的配置信息都維持在Configuration對象之中。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。


本文標(biāo)題:手寫Mybatis,徹底搞懂框架原理-創(chuàng)新互聯(lián)
標(biāo)題來源:http://weahome.cn/article/djjici.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部