1.SqlSessionFactoryBuilder
SqlSessionFactoryBuilder是以工具類的方式來使用:須要建立sqlSessionFactory時就new一個 SqlSessionFactoryBuilderjava
2.sqlSessionFactory
正常開發時,以單例方式管理sqlSessionFactory,整個系統運行過程當中sqlSessionFactory只有一個實例,未來和Spring整合後由Spring以單例方式管理sqlSessionFactory程序員
3.SqlSession
SqlSession是一個面向用戶(程序員)的接口,程序員調用 SqlSession接口的方法進行操做數據庫。那麼咱們會思考:SqlSession可否以單例方式使用???因爲 SqlSession是線程不安全的,因此 SqlSession最佳應用範圍在方法體內。也就是說在方法體內定義局部變量 SqlSession的對象來使用。sql
咱們先來看看MyBatis原始開發dao的開發方式,發現原始開發的問題,而後再來看看MyBatis使用mapper動態代理開發dao的方式(也是MyBatis目前使用的開發dao的方式)。數據庫
而後就能在測試類中使用。測試類代碼以下:mybatis
咱們來看看這種方式開發有什麼問題?架構
下面咱們看看mapper動態代理的方式。app
這種方式下程序員只須要寫dao接口,dao接口實現對象由mybatis自動生成代理對象。由於自己dao在三層架構中就是一個通用的接口。工具
要想讓mybatis自動建立dao接口實現類的代理對象,必需要遵循一些規則:測試
採用這種方式後,咱們即可將第一篇文章中提到的User.xml改成UserMapper.xml。文件目錄以下:其中有些類咱們會在後面用到。
mapper映射文件的命名方式建議表名加Mapper.xml,namespace指定爲mapper接口的全限定名。
mybatis提出了mapper接口,至關於dao接口,mapper接口的命名方式建議爲表名加Mapper.
1 |
public interface UserMapper{}; |
<mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers>
在UserMapper.java中添加以下兩個方法:
對於UserMapper.xml,無論查詢記錄是單條仍是多條,在statement(即UserMapper.xml)中的resultType都定義一致,都是單條記錄映射的pojo類型。
而對於UserMapper.java接口方法中的返回值,若是返回的是單個對象,返回值類型是pojo,生成的代理對象內部會自動經過selectOne獲取記錄,若是返回值類型是多條對象,生成的代理對象內部會自動經過selectList獲取記錄。
使用Mapper代理方式進行開發,使程序員只須要關注UserMapper.java接口中的方法,它的實現類由Mapper自動爲咱們生成,帶來了很大的方便。但這種方式也有它的弊端。
Expected one result (for null ) to be returned by selectOne() but found 4
;