1. 一級緩存;指的是mybatis中sqlSession對象的緩存,當我們執行查詢以后,查詢的結果會同時存入sqlSession中,再次查詢的時候,先去sqlSession中查詢,有的話直接拿出,當sqlSession消失時,mybatis的一級緩存也就消失了,當調用sqlSession的修改、添加、刪除、commit()、close()等方法時,會清空一級緩存。
2. 二級緩存:指的是mybatis中的sqlSessionFactory對象的緩存,由同一個sqlSessionFactory對象創建的sqlSession共享其緩存,但是其中緩存的是數據而不是對象。當命中二級緩存時,通過存儲的數據構造成對象返回。查詢數據的時候,查詢的流程是二級緩存 > 一級緩存 > 數據庫。
3. 二級緩存執行時機,如果開啟了二級緩存,sqlSession進行close()后,才會把sqlSession一級緩存中的數據添加到二級緩存中,為了將緩存數據取出執行反序列化,還需要將要緩存的pojo實現Serializable接口,因為二級緩存數據存儲介質多種多樣,不一定只存在內存中,也可能存在硬盤中。
4. mybatis執行步驟,mybatis框架主要是圍繞sqlSessionFactory進行的,
具體的步驟:
- 定義一個configuration對象,其中包含數據源、事務、mapper文件資源以及影響數據庫行為屬性設置settings。
- 通過配置對象,則可以創建一個sqlSessionFactoryBuilder對象。
- 通過sqlSessionFactoryBuilder獲得sqlSessionFactory實例。
- 通過sqlSessionFactory實例創建sqlSession實例,通過sqlSession對數據庫進行操作。
5. 代碼實例
5.1 mybatis-config.xml文件內容
5.2 MyBatisTest類 public class MyBatisTest { public static void main(String[] args) { try { //讀取mybatis-config.xml文件 InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//初始化mybatis,創建SqlSessionFactory類的實例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//創建session實例SqlSession session = sqlSessionFactory.openSession(); /* * 接下來在這里做很多事情,到目前為止,目的已經達到得到了SqlSession對象.通過調用SqlSession里面的方法, * 可以測試MyBatis和Dao層接口方法之間的正確性,當然也可以做別的很多事情,在這里就不列舉了 */
//插入數據 User user = new User(); user.setC_password("123"); user.setC_username("123"); user.setC_salt("123"); //個參數為方法的完全限定名:位置信息+映射文件當中的id session.insert("com.cn.dao.UserMapping.insertUserInformation", user);
//提交事務 session.commit(); //關閉session session.close(); } catch (IOException e) { e.printStackTrace(); } } }