精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

手寫Mybatis,徹底搞懂框架原理

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

10年積累的成都網站設計、網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有沾化免費網站建設讓你可以放心的選擇與我們合作。

Mybatis的架構設計

手寫Mybatis,徹底搞懂框架原理
Mybatis的功能架構分為三層:

  • 接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層接收到調用請求就會調用數據處理層來完成具體的數據處理。
  • 數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。
  • 框架支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎的組件。為上層的數據處理層提供最基礎的支撐。
  • mybatis的運行流程

    手寫Mybatis,徹底搞懂框架原理
    1.加載配置:配置來源于兩個地方,配置文件和注解。將SQL的配置信息加載成為MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
    2.SQL解析:當API接口層接收到調用請求時,會接收到傳入SQL的ID和傳入對象(可以是Map、JavaBean或者基本數據類型),Mybatis會根據SQL的ID找到對應的MappedStatement,然后根據傳入參數對象對MappedStatement進行解析,解析后可以得到最終要執行的SQL語句和參數。
    3.SQL執行:將最終得到的SQL和參數拿到數據庫進行執行,得到操作數據庫的結果。
    4.結果映射:將操作數據庫的結果按照映射的配置進行轉換,可以轉換成HashMap、JavaBean或者基本數據類型,并將最終結果返回。
    手寫mybatis的目錄
    來看下筆者的手寫mybatis的文件目錄。查看Bootstrap文件上說明,然后運行該文件,斷點調試即可一步步了解mybatis框架的原理了。(很多地方都注解了,方便初學者更多了解框架細節)

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

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

mybatis目錄結構及內容
以下目錄對照的是mybatis-3.5.1的源碼。

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

當前標題:手寫Mybatis,徹底搞懂框架原理
當前鏈接:http://m.jcarcd.cn/article/pesdso.html
主站蜘蛛池模板: 国产亚洲精品成人 | 国产自产21区 | 麻花天美星空mv免 | 欧美曰逼| 国产乱偷国产偷高清 | 韩国电影 | 日韩一区二精品服务 | 日韩去日本高清在线 | 国内最真实| 91精品92| 国内揄拍国 | 国产/精品| 日韩欧美亚洲大片 | 日韩欧美婷婷 | 乱伦91欧| 97超级碰碰碰 | 91中文字幕永久 | 国产精品同性女性 | 九九精品电影 | 日韩精品在线电影 | 日本网站在线播放 | 国产欧美另| 日韩精品美女视频 | 成人品观看免费 | 日本在线www| 国产精品自在拍在 | 成人精品秘免费 | 日本高清xxxxx | 成人欧美一| 九九在线精品观看 | 国产精品自拍第一页 | 国产家庭影院 | 国产自在线91| 91九色熟女| 九色福利导航 | 精品福利在线视频 | 国产免费无遮 | 国产久免费在线观看 | 91.cn国产大片| 区亚洲二区三区 | 欧美一级在线 |