MyBatis 实际使用案例-核心对象的生命周期
在編程式使用的這個demo 里面,我們看到了MyBatis 里面的幾個核心對象:SqlSessionFactoryBuiler、SqlSessionFactory、SqlSession 和Mapper 對象。這幾個核心對象在MyBatis 的整個工作流程里面的不同環節發揮作用。如果說我們不用容器,自己去管理這些對象的話,我們必須思考一個問題:什么時候創建和銷毀這些對象?
在一些分布式的應用里面,多線程高并發的場景中,如果要寫出高效的代碼,必須了解這四個對象的生命周期。這四個對象的聲明周期的描述在官網上面也可以找到。
http://www.mybatis.org/mybatis-3/zh/getting-started.html
我們從每個對象的作用的角度來理解一下,只有理解了它們是干什么的,才知道什么時候應該創建,什么時候應該銷毀。
1)SqlSessionFactoryBuiler
首先是SqlSessionFactoryBuiler 。它是用來構建SqlSessionFactory 的, 而SqlSessionFactory 只需要一個,所以只要構建了這一個SqlSessionFactory,它的使命就完成了,也就沒有存在的意義了。所以它的生命周期只存在于方法的局部。
2)SqlSessionFactory
SqlSessionFactory 是用來創建SqlSession 的,每次應用程序訪問數據庫,都需要創建一個會話。因為我們一直有創建會話的需要,所以SqlSessionFactory 應該存在于應用的整個生命周期中(作用域是應用作用域)。創建SqlSession 只需要一個實例來做這件事就行了,否則會產生很多的混亂,和浪費資源。所以我們要采用單例模式。
3)SqlSession
SqlSession 是一個會話,因為它不是線程安全的,不能在線程間共享。所以我們在請求開始的時候創建一個SqlSession 對象,在請求結束或者說方法執行完畢的時候要及時關閉它(一次請求或者操作中)。
4)Mapper
Mapper(實際上是一個代理對象)是從SqlSession 中獲取的。
BlogMapper mapper = session.getMapper(BlogMapper.class);它的作用是發送SQL 來操作數據庫的數據。它應該在一個SqlSession 事務方法之內。
最后總結如下:
| 對象 | 生命周期 |
| SqlSessionFactoryBuiler | 方法局部(method) |
| SqlSessionFactory(單例) | 應用級別(application) |
| SqlSession | 請求和操作(request/method) |
| Mapper | 方法(method) |
這個就是我們在編程式的使用里面看到的四個對象的生命周期的總結。
?
總結
以上是生活随笔為你收集整理的MyBatis 实际使用案例-核心对象的生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis 实际使用案例-编程式使用
- 下一篇: MyBatis 实际使用案例-核心配置解