本篇內容介紹了“mybatis框架的設計原理”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
成都創新互聯公司專注于周村網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供周村營銷型網站建設,周村網站制作、周村網頁設計、周村網站官網定制、微信小程序服務,打造周村網絡公司原創品牌,更為您提供周村網站排名全網營銷落地服務。
mybatis的前身是iBatis,其源于“Internet”和“abatis”的組合,是一款優秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射。mybatis避免了幾乎所有的JDBC代碼和手動設置參數以及獲取結果集,它可以使用簡單的XML或注解來配置和映射原生信息,將接口和Java的POJO映射成數據庫中的記錄。
Mybatis的功能架構分為三層:
接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層接收到調用請求就會調用數據處理層來完成具體的數據處理。
數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。
框架支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎的組件。為上層的數據處理層提供最基礎的支撐。
加載配置:配置來源于兩個地方,配置文件和注解。將SQL的配置信息加載成為MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
SQL解析:當API接口層接收到調用請求時,會接收到傳入SQL的ID和傳入對象(可以是Map、JavaBean或者基本數據類型),Mybatis會根據SQL的ID找到對應的MappedStatement,然后根據傳入參數對象對MappedStatement進行解析,解析后可以得到最終要執行的SQL語句和參數。
SQL執行:將最終得到的SQL和參數拿到數據庫進行執行,得到操作數據庫的結果。
結果映射:將操作數據庫的結果按照映射的配置進行轉換,可以轉換成HashMap、JavaBean或者基本數據類型,并將最終結果返回。
來看下筆者的手寫mybatis的文件目錄。查看Bootstrap文件上說明,然后運行該文件,斷點調試即可一步步了解mybatis框架的原理了。(很多地方都注解了,方便初學者更多了解框架細節)
代碼地址請查看,https://github.com/y277an/java-you-need-know。再看看正版的代碼結構吧。
考慮到transaction對理解框架原理產生干擾,所以代碼全部刪掉
以下目錄對照的是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的核心組件如下
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維護了一條<select|update|delete|insert>節點的封裝。
SqlSource。負責根據用戶傳遞的parameterObject,動態地生成SQL語句,將信息封裝到BoundSql對象中,并返回。
BoundSql。表示動態生成的SQL語句以及相應的參數信息。
Configuration。MyBatis所有的配置信息都維持在Configuration對象之中。
“mybatis框架的設計原理”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!
當前題目:mybatis框架的設計原理
網址分享:http://m.newbst.com/article40/jeieeo.html
成都網站建設公司_創新互聯,為您提供網站內鏈、域名注冊、ChatGPT、面包屑導航、品牌網站制作、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯