一級緩存:
MyBatis的一級緩存指的是在一個Session域內,session為關閉的時候執行的查詢會根據SQL為key被緩存(跟mysql緩存一樣,修改任何參數的值都會導致緩存失效)
package cn.itcast.mybatis.dao; import static org.junit.Assert.*; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import cn.itcast.mybatis.pojo.User; public class UserDAOTest2 { private static IUser userDAO = null; private static SqlSession sqlSession = null; @Before public void init() { try { // 構造SqlSessionFactory // 定義配置文件路徑 String resource = "mybatis-config.xml"; // 讀取配置文件 InputStream inputStream = Resources.getResourceAsStream(resource); // 通過SqlSessionFactoryBuilder構建一個SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test"); this.sqlSession = sqlSessionFactory.openSession(false);//設為false時,必須手動提交:sqlSession.commit(); // this.sqlSession.close(); this.userDAO = sqlSession.getMapper(IUser.class); } catch (IOException e) { e.printStackTrace(); } } static{ // 構造SqlSessionFactory // 定義配置文件路徑 String resource = "mybatis-config.xml"; // 讀取配置文件 InputStream inputStream; try { inputStream = Resources.getResourceAsStream(resource); // 通過SqlSessionFactoryBuilder構建一個SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test"); sqlSession = sqlSessionFactory.openSession(false);//設為false時,必須手動提交:sqlSession.commit(); // this.sqlSession.close();//當關閉的時候,在下面的方法中都會報錯 userDAO = sqlSession.getMapper(IUser.class); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testQueryUserByUserName() { User user = this.userDAO.queryUserByUserName("zhangsan"); System.out.println(user); } @Test public void testQueryByTabkeName() { List <HashMap<String, Object>> list2= this.userDAO.queryByTabkeName("tb_order"); for (HashMap<String, Object> hashMap : list2) { System.out.println(hashMap); } } @Test public void testQueryUserByUserNameAndPassword() { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("userName", "zhangsan"); map.put("password", "123456"); // User user = this.userDAO.queryUserByUserNameAndPassword(map); User user = this.userDAO.queryUserByUserNameAndPassword("zhangsan","123456"); System.out.println(user); } @Test public void testSaveUser() { User user = new User(); user.setAge(20); user.setBirthday(new Date()); user.setName("test_name_9"); user.setPassword("123456"); user.setSex(true); user.setUserName("test_username_9"); this.userDAO.saveUser(user); System.out.println(user); // 提交 this.sqlSession.commit(); } @Test public void testUpdateUser() { User user = new User(); user.setAge(20); user.setBirthday(new Date()); user.setName("test_name_1"); user.setPassword("123qwe"); user.setSex(true); user.setId(6L); this.userDAO.updateUser(user); this.sqlSession.commit(); } @Test public void testDeleteUserById() { this.userDAO.deleteUserById(6L); } }
二級緩存:
Mybatis的二級緩存的作用域是一個mapper的namespace,同一個namespace中查詢sql可以從緩存中命中。
二級緩存是可以跨session的。
開啟二級緩存:
在mapper.xml文件中加入 <cache /> 。
