当前位置: 首页 > wzjs >正文

手机网站建设定制培训网络营销的机构

手机网站建设定制,培训网络营销的机构,昆明网站建设方案外包,做 专而精 的网站1. 缓存的概念缓存的概念在内存中临时存储数据,速度快,可以减少数据库的访问次数。经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。2. MyBatis的一级缓存MyBatis的一级缓存也是SqlSession的缓存。SqlSes…

1. 缓存的概念

  1. 缓存的概念

    1. 在内存中临时存储数据,速度快,可以减少数据库的访问次数。
    2. 经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。

 

2. MyBatis的一级缓存

  1. MyBatis的一级缓存也是SqlSession的缓存。

  2. SqlSession对象中维护了一个Map集合,用于存储相互的缓存数据。

  3. 查询的时候,先从SqlSession的缓存中查找,如果有,直接返回。如果没有,查询数据库。

  4. 证明一级缓存的存在,通过用户id查询2次,查看结果。

     测试代码:

 @Testpublic void findById() {User user1 = mapper.findById(1);System.out.println(user1);User user2 = mapper.findById(1);System.out.println(user2);}

 结果:

 此时我们发现,这里只有一条sql查询语句,说明第一次是通过数据库查询到的信息,而第二次没有查询数据库,直接就显示了信息,说明信息是从缓存获得的

再直观一点:清理session的缓存再进行信息查询

测试代码:

   @Testpublic void findById() {User user1 = mapper.findById(1);System.out.println(user1);//清理掉之前缓存的数据session.clearCache();User user2 = mapper.findById(1);System.out.println(user2);}

结果:

显而易见,缓存消失,查询了两次数据库 

5.一级缓存的原理分析

  1.一级缓存底层使用的是Map集合,key存储的是执行的SQL语句,value存放的是查询的对象
2.BaseExecutor类的152行源码地方先查询缓存,再查询数据库
3.一级缓存的生命周期和SlSession的生命周期相同,SalSession对象关闭,一级缓存也会关闭。
1.session.clearCache()调用该方法可以清空缓存
2.调用调用SalSession的update、insert、delete、commit和close等方法的时候也会清
空缓存。

3. MyBatis的二级缓存

1.二级缓存是全局缓存,范围跨越多个SqlSession,可以再不同的Mapper之间共享

2.应用启动时创建,应用关闭时销毁

3.缓存对象必须实现Serializable接口

2.1二级缓存的配置步骤:

 1.全局启用二级缓存(Mybatis总配置文件里)

<settings><setting name="cacheEnabled" value="true"/> <!-- 必须设置为 true -->
</settings>

2.在Mapper中声明缓存 


2.2测试代码 
import com.qcby.entity.User;
import com.qcby.mapper.AccountMapper;
import com.qcby.mapper.UserMapper;
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.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class UserTest {private InputStream in;private SqlSessionFactory factory;@Beforepublic void init() throws Exception {// 加载配置文件in = Resources.getResourceAsStream("SqlMap.xml");// 创建工厂对象factory = new SqlSessionFactoryBuilder().build(in);System.out.println("执行开始");}@Afterpublic void destory() throws IOException {in.close();System.out.println("执行结束");}
//    @Test
//    public void findOneToMany() {
//        List<User> users = mapper.findOneToMany();
//        for (User user : users) {
//            System.out.println(user);
//        }
//    }@Testpublic void findById() {SqlSession session = factory.openSession();UserMapper mapper = session.getMapper(UserMapper.class);User user1 = mapper.findById(1);System.out.println(user1);session.close();SqlSession session2 = factory.openSession();UserMapper mapper1 = session2.getMapper(UserMapper.class);User user2 = mapper1.findById(1);System.out.println(user2);session.close();}
}

 

两次查询获取到的不是同一个对象,说明是第个信息是从二级缓存中获取的

4.二级缓存工作流程

  1. 第一次查询 (user1):

    • 查询数据库获取数据

    • 将结果存入一级缓存(SqlSession级别)

    • session.close()时,一级缓存内容会序列化后存入二级缓存(SqlSessionFactory级别)

  2. 第二次查询 (user2):

    • 新Session首先检查自己的一级缓存 → 没有(因为是新Session)

    • 检查二级缓存 → 找到缓存数据

    • 将缓存数据反序列化后创建新对象返回

    • 不会访问数据库(这就是为什么对象不同但数据相同)

感谢您的观看

http://www.dtcms.com/wzjs/180295.html

相关文章:

  • 建网站做点什么好南昌网站优化公司
  • 手机商城网站建设策划方案范文网络搜索引擎
  • 数码网站建设论文免费源码资源源码站
  • 做预算的网站附近电商培训班
  • 做公司网站需要提供的资料百度seo咋做
  • 网站优化哪里好网络seo推广培训
  • 珠海微网站哈尔滨优化网站公司
  • 乐陵seo排名企业网站优化解决方案
  • app软件免费模板下载网站成品网站源码1688免费推荐
  • 搭建网站教程网络推广员是干什么的
  • 余姚公司网站建设常州百度推广代理公司
  • 网站上如何做天气插件seo优化什么意思
  • 做网站的叫什么软件网店推广渠道有哪些
  • 专业做球赛旅游的网站足球排名世界排名
  • python 网站开发代码免费一键生成个人网站
  • 邛崃建设局网站seo关键词软件
  • 湖南建设厅网站外贸网站平台都有哪些 免费的
  • 谷城网站建设最近发生的热点新闻事件
  • 网站开发上市公司查收录网站
  • 涪城网站建设2022小说排行榜百度风云榜
  • 企业网站建设心得怎么收录网站
  • 定制一款appseo优化排名技术百度教程
  • 宠物网站建设毕业论文2022拉新推广赚钱的app
  • 苹果手机免费做ppt模板下载网站有哪些网站推广的作用
  • 招商外包服务公司保定seo网络推广
  • 东莞建外贸网站提高工作效率的句子
  • 网站建设方案备案内部优化
  • 网站管理 上传模板免费引流推广方法
  • 开封网站建设中层管理者培训课程有哪些
  • 大连免费建站模板安卓在线视频嗅探app