MyBatis學習(二)--MyBatis核心類簡介


前言

  每個基於 MyBatis 的應用都是以一個 SqlSessionFactory 的實例為中心的。SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置文件或一個預先定制的 Configuration 的實例構建出 SqlSessionFactory 的實例。

MyBatis取代JDBC,框架會做什么:

  讀取配置文件

  底層一定是JDBC

  結果集的映射(反射)

  ObjectFactory:對象工廠,實現對應的pojo對象的創建

  其他功能:提供基於注解實現MyBatis;對日志的支持;Ognl表達式;對事物的管理;緩存…

 

SqlSessionFactoryBuilder

  讀取全局配置文件,得到數據源信息,創建連接工廠SqlSessionFactory。它的特點是,當創建了SqlSessionFactory對象之后,這個類就不需要了。因此,它的最佳范圍是存在於方法體內,也就是局部變量。

   注意:

  是一個類

  讀取全局配置文件,得到數據源信息,創建連接工廠

  配置文件的輸入流

  通過環境id(environmentID)來創建與之對應的連接工廠

 

SqlSessionFactory

  連接工廠;創建SqlSession實例的工廠。它的特點是,SqlSessionFactory對象一旦被創建,就無法銷毀或者再創建,也不建議多次創建SqlSessionFactory對象。因此,它的最佳范圍是應用(Application)范圍內。

  注意:

  是一個接口;

  一個數據庫會對應一個連接工廠(提供多個連接)

    POOLED:表示factory中的連接是可以重用的,(連接池)

    UNPOOLED:每次使用都有工廠提供一個新的連接

    JNDI:與框架整合的時候,連接數據配置項的使用

  存在於應用程序的整個運行生命周期,是單例的;后續是由Spring管理該實例的生命周期

得到SqlSession的方法:

 

SqlSession

  會話對象類,SqlSession 完全包含了面向數據庫執行 SQL 命令所需的所有方法。可以通過 SqlSession 實例來直接執行已映射的 SQL 語句。SqlSession對應着一次數據庫會話,所以每次訪問數據庫時都需要在SqlSessionFactory實例的openSession()方法中創建它。但一個SqlSession會話也可以執行多次SQL語句。

  注意:

  是一個接口

  數據庫的連接,完成一次數據庫的訪問和結果的映射的對象

  一個連接可以讓多個線程同時使用嗎?不能,非線程安全的

  每個線程都應該有一個SqlSession的實例來完成對數據庫的操作

  JDBC中的事務是攜帶在Connection,MyBatis中的事務攜帶在SqlSession中

  Web模型:每次請求—一個線程—SqlSession,SqlSession在web中的作用域對應的是請求作用域(request);

  每個請求對應一個事務,事務—SqlSession,SqlSession在web中的作用域對應request請求介紹的時候,SqlSession會關閉

提供的方法有:

注:

  selectOne/selectList的區別:selectOne是基於selectList實現的;

 

Mapper

  映射類,跟映射關系對應,是從SqlSession中獲取的。任何映射器實例的最大作用域是和請求它們的 SqlSession 相同的。盡管如此,映射器實例的最佳作用域是方法作用域。也就是說,映射器實例應該在調用它們的方法中被請求,用過之后即可廢棄。並不需要顯式地關閉映射器實例,盡管在整個請求作用域(request scope)保持映射器實例也不會有什么問題,但是很快你會發現,像 SqlSession 一樣,在這個作用域上管理太多的資源的話會難於控制。所以要保持簡單,最好把映射器放在方法作用域(method scope)內。

  注意:

  映射類,跟映射關系對應,SQL

  作為接口的代理類

  session.getMapper(接口 class 實例)

  將傳入的接口類型與映射的XML文件關聯起來,接口的實現是基於XML配置文件中的SQL實現,生成代理類對象

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM