mybatis的兩個核心對象SqlSessionFactory和SqlSession對象
參見:https://www.cnblogs.com/wxdestiny/p/9743686.html
mybatis的兩個核心對象
使用MyBatis框架時,主要涉及兩個核心對象:SqlSessionFactory和SqlSession。
因為mybatis是通過mybatis.xml配置文件來進行初始化的,它通過配置文件構建會話工廠SqlSessionFactory,進而通過會話工廠構建一個sqlsession會話,此時就可以通過這個會話向數據庫發送sql語句進行操作了。
SqlSessionFactory是MyBatis框架中十分重要的對象,它是單個數據庫映射關系經過編譯后的內存鏡像,其主要作用是創建SqlSession。SqlSessionFactory對象的實例可以通過SqlSessionFactoryBuilder對象來構建,而SqlSessionFactoryBuilder則可以通過XML配置文件或一個預先定義好的Configuration實例構建出SqlSessionFactory的實例。
通過配置xml文件構建會話工廠
InputStream inputStream = Resources.getResourceAsStream("配置文件位置");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
注意:SqlSessionFactory對象是線程安全的,它一旦被創建,在整個應用執行期間都會存在。如果我們多次的創建同一個數據庫的SqlSessionFactory,那么此數據庫的資源將很容易被耗盡。 為此,通常每一個數據庫都會只對應一個SqlSessionFactory,所以在構建SqlSessionFactory實例時,建議使用單列模式。
SqlSession是MyBatis框架中另一個重要的對象,它是應用程序與持久層之間執行交互操作的一個單線程對象,其主要作用是執行持久化操作,也就是發送sql進行執行操作。SqlSession對象包含了數據庫中所有執行SQL操作的方法,由於其底層封裝了JDBC連接,所以可以直接使用其實例來執行已映射的SQL語句。
注意:每一個線程都應該有一個自己的SqlSession實例,並且該實例是不能被共享的。同時,SqlSession實例也是線程不安全的,因此其使用范圍最好在一次請求或一個方法中, 絕不能將其放在一個類的靜態字段、實例字段或任何類型的管理范圍(如Servlet的HttpSession)中使用。 使用完SqlSession對象后要及時關閉,通常可以將其放在finally塊中關閉。