1.
首先Mybatis為我們提供了一個操作數據庫的會話對象叫Sqlsession,所以我們就需要先獲取sqlsession對象:
//加載核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //獲取sqlSessionFactoryBuilder(是我們提供sqlSession的一個工廠對象的一個構建對象) SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //獲取sqlSessionFactory(獲取sqlSession工廠對象) SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //獲取sqlSession(獲取Mybatis為我們提供一個操作數據庫的會話對象) SqlSession sqlSession = sqlSessionFactory.openSession();
補充:
- SqlSession:代表Java程序和數據庫之間的會話。(HttpSession是Java程序和瀏覽器之間的會話)
- SqlSessionFactory:是“生產”SqlSession的“工廠”
- 工廠模式:如果創建某一個對象,使用的過程基本固定,那么我們就可以把創建這個對象的相關代碼封裝到一個“工廠類”中,以后都使用這個工廠類來“生產”我們需要的對象
2.
然后通過SqlSession來實現我們當前Mybatis中的功能,再訪問一個sql語句 去執行sql語句來獲得一個結果。再者Mybatis是面向接口編程,我們調用mapper接口中的方法,它就會自動的匹配一個sql語句來執行,所以我們接下來獲取mapper接口的對象(一個接口我們想創建對象就需要實現類,但之前我們并沒有實現類)
傳進去的參數是類型的一個class對象,然后這個類型的泛型是T,而這個方法的返回值是我們當前的T對象,即當我們傳進去一個類型的class對象后,它會幫助我們獲取這個類型的實例化對象。
最后總結一下流程:
每當我們去調用mapper接口中的方法,
他就根據我們的mapper接口找到映射文件,
然后根據當前調用的方法找到我們的sql語句
增刪改受影響的是行數。當sql語句執行成功后,但在數據庫中沒有添加數據。
這里是(transactionManager)事務管理器,type=JDBC表示用u最原始的JDBC方式來管理事務,所以說現在事務的提交或者回滾都需要手動處理,即造成在數據庫中沒有添加數據。
補充:
優化1
優化2
通過日志功能來監測當前實現功能他所執行的sql。
增加修改數據功能
先在mapper接口寫好方法,然后通過方法去映射文件,再編寫好sql語句。
特殊的查詢功能
首先有返回值(一個對象或者一個對象的集合)
補充:
? 1. 查詢的標簽select必須設置屬性resultType或resultMap,用于設置實體類和數據庫表的映射關系 ?
? ? - resultType:自動映射,用于屬性名和表中字段名一致的情況 ?
? ? - resultMap:自定義映射,用于一對多或多對一或字段名和屬性名不一致的情況(自動的把我們當前查詢的結果的字段名來作為屬性名進行賦值,如果能匹配就賦值不能就不賦值)
? 2. 當查詢的數據為多條時,不能使用實體類作為返回值,只能使用集合,否則會拋出異常TooManyResultsException;但是若查詢的數據只有一條,可以使用實體類或集合作為返回值