欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:MyBatis的緩存

柚子快報激活碼778899分享:MyBatis的緩存

http://yzkb.51969.com/

目錄

1.緩存介紹

2.一級緩存

2.1.mapper

2.2.測試一級緩存

2.3.一級緩存的分析

2.4.測試清空一級緩存

3.二級緩存

3.1.pojo

3.2.開啟二級緩存

3.3.測試二級緩存

3.4.二級緩存分析

3.5.測試清空二級緩存

1.緩存介紹

為什么使用緩存? 首次訪問時,查詢數(shù)據(jù)庫,并將數(shù)據(jù)存儲到內(nèi)存中;再次訪問時直接訪問緩存,減少IO、硬盤讀寫次數(shù)、提高效率 Mybatis中的一級緩存和二級緩存?

一級緩存: 它指的是mybatis中的SqlSession對象的緩存。當(dāng)我們執(zhí)行完查詢之后,查詢的結(jié)果會同時存在在SqlSession為我們提供的一塊區(qū)域中。當(dāng)我們再次查詢同樣的數(shù)據(jù),mybatis會先去SqlSession中查詢是否有,有的話直接拿出來使用。當(dāng)SqlSession對象消失時,Mybatis的一級緩存也就消失了。 二級緩存: 它指的是Mybatis中SqlSessionFactory對象的緩存,由同一個SqlSessioFactory對象創(chuàng)建的SqlSession共享其緩存。

2.一級緩存

2.1.mapper

public interface UserDao {

//根據(jù)id查詢用戶信息

public User findUserById(Integer id);

}

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

2.2.測試一級緩存

@Test

public void testFindUserById() throws Exception{

SqlSession sqlSession1 = sqlSessionFactory.openSession();

UserDao userDao = sqlSession1.getMapper(UserDao.class);

User user1 = userDao.findUserById(41);//執(zhí)行查詢

System.out.println("第一次查詢:" + user1);

User user2 = userDao.findUserById(41);//不執(zhí)行查詢

System.out.println("第二次查詢:" + user2);

SqlSession sqlSession2 = sqlSessionFactory.openSession();

userDao = sqlSession2.getMapper(UserDao.class);

User user3 = userDao.findUserById(41);//執(zhí)行查詢

System.out.println("第三次查詢:" + user1);

}

2.3.一級緩存的分析

一級緩存是SqlSession范圍的緩存,當(dāng)調(diào)用SqlSession的commit(),close()等方法時,就會清空一級緩存。

第一次發(fā)起查詢用戶id為 1 的用戶信息,先去找緩存中是否有id為 1 的用戶信息,如果沒有,從數(shù)據(jù)庫查詢用戶信息。 得到用戶信息,將用戶信息存儲到一級緩存中。 如果sqlSession去執(zhí)行 commit操作(執(zhí)行插入、更新、刪除),清空 SqlSession 中的一級緩存,這樣做的目的為了讓緩存中存儲的是最新的信息,避免臟讀。 第二次發(fā)起查詢用戶id為1的用戶信息,先去找緩存中是否有id為1的用戶信息,緩存中有,直接從緩存中獲取用戶信息。

2.4.測試清空一級緩存

@Test

public void testFindUserById() throws Exception{

UserDao userDao = sqlSession.getMapper(UserDao.class);

User user1 = userDao.findUserById(41);//執(zhí)行查詢

System.out.println("第一次查詢:" + user1);

User user2 = userDao.findUserById(41);//不執(zhí)行查詢

System.out.println("第二次查詢:" + user2);

sqlSession.commit();

User user3 = userDao.findUserById(41);//執(zhí)行查詢

System.out.println("第三次查詢:" + user1);

}

3.二級緩存

3.1.pojo

注意:當(dāng)我們在使用二級緩存時,所緩存的類一定要實現(xiàn)java.io.Serializable接口,這種就可以使用序列化方式來保存對象。

public class User implements Serializable {

private Integer id;

private String username;

private String password;

private Date birthday;

private String sex;

private String address;

//set get... ...

}

3.2.開啟二級緩存

1.在SqlMapConfig.xml 文件開啟二級緩存

2.配置相關(guān)的Mapper映射文件

3.3.測試二級緩存

@Test

public void testSecondUserById(){

SqlSession sqlSession1 = sqlSessionFactory.openSession();

UserDao userDao = sqlSession1.getMapper(UserDao.class);

User user1 = userDao.findUserById(41);//執(zhí)行查詢

System.out.println("第一次查詢:" + user1);

sqlSession1.commit();//二級緩存在sqlSession.commit()或者sqlSession.close()之后生效

SqlSession sqlSession2 = sqlSessionFactory.openSession();

UserDao userDao2 = sqlSession2.getMapper(UserDao.class);

User user2 = userDao2.findUserById(41);//不執(zhí)行查詢

System.out.println("第二次查詢:" + user2);

}

3.4.二級緩存分析

二級緩存是mapper映射級別的緩存,多個SqlSession去操作同一個Mapper映射的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。

二級緩存結(jié)構(gòu)圖:

3.5.測試清空二級緩存

@Test

public void testSecondUserById(){

SqlSession sqlSession1 = sqlSessionFactory.openSession();

UserDao userDao = sqlSession1.getMapper(UserDao.class);

User user1 = userDao.findUserById(43);//執(zhí)行查詢

System.out.println("第一次查詢:" + user1);

sqlSession1.commit();

SqlSession sqlSession3 = sqlSessionFactory.openSession();

UserDao userDao3 = sqlSession3.getMapper(UserDao.class);

userDao3.deleteUserById(41);

sqlSession3.commit();

SqlSession sqlSession2 = sqlSessionFactory.openSession();

UserDao userDao2 = sqlSession2.getMapper(UserDao.class);

User user2 = userDao2.findUserById(43);不執(zhí)行查詢

System.out.println("第二次查詢:" + user2);

sqlSession2.commit();

sqlSession2.close();

}

柚子快報激活碼778899分享:MyBatis的緩存

http://yzkb.51969.com/

推薦鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18397114.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄