全网最全MyBatis基于XML使用系列四:缓存

System.out.println(“================================”);

SqlSession sqlSession2 = sqlSessionFactory.openSession();

EmpMapper mapper2 = sqlSession2.getMapper(EmpMapper.class);

List list2 = mapper2.selectAllEmp();

for (Emp emp : list2) {

System.out.println(emp);

}

sqlSession.close();

sqlSession2.close();

}

参数不一致,缓存失效

发送过程中发生了数据的修改,缓存失效

@Test

public void test03() {

SqlSession sqlSession = sqlSessionFactory.openSession();

EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);

Emp empByEmpno = mapper.findEmpByEmpno(1111);

System.out.println(empByEmpno);

System.out.println(“================================”);

empByEmpno.setEname(“zhangsan”);

int i = mapper.updateEmp(empByEmpno);

System.out.println(i);

System.out.println(“================================”);

Emp empByEmpno1 = mapper.findEmpByEmpno(1111);

System.out.println(empByEmpno1);

sqlSession.close();

}

在两次查询期间,手动去清空缓存,缓存失效

@Test

public void test03() {

SqlSession sqlSession = sqlSessionFactory.openSession();

EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);

Emp empByEmpno = mapper.findEmpByEmpno(1111);

System.out.println(empByEmpno);

System.out.println(“================================”);

System.out.println(“手动清空缓存”);

sqlSession.clearCache();

System.out.println(“================================”);

Emp empByEmpno1 = mapper.findEmpByEmpno(1111);

System.out.println(empByEmpno1);

sqlSession.close();

}

总结

特点:

  • 1.默认就开启了,也可以关闭一级缓存 localCacheScope=STATEMENT

  • 2.作用域:是基于sqlSession(默认),一次数据库操作会话。

  • 3.缓存默认实现类PerpetualCache ,使用map进行存储的

  • 4.查询完就会进行存储

  • 5.先从二级缓存中获取,再从一级缓存中获取 * key==> sqlid+sql

失效情况:

  • 1.不同的sqlSession会使一级缓存失效

  • 2.同一个SqlSession,但是查询语句不一样

  • 3.同一个SqlSession,查询语句一样,期间执行增删改操作

  • 4.同一个SqlSession,查询语句一样,执行手动清除缓存

二级缓存


二级缓存是namespace级别的缓存,他比一级缓存更加底层,一般情况下Mybatis是默认不开启二级缓存的。

如果需要开启二级缓存那么则需要实现一下两个条件

  • 实体类必须序列化

  • 在xml配置文件中配置cache标签

image.png

基本实现

  • 1、全局配置文件中添加如下配置:
  • 2、配置EmpMapper.xml映射

  • 3、修改实体类必须要实现Serializable接口

  • 4、测试实现

@Test

public void test04() {

SqlSession sqlSession = sqlSessionFactory.openSession();

SqlSession sqlSession2 = sqlSessionFactory.openSession();

EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);

EmpMapper mapper2 = sqlSession2.getMapper(EmpMapper.class);

Emp empByEmpno = mapper.findEmpByEmpno(1111);

System.out.println(empByEmpno);

sqlSession.close();

Emp empByEmpno1 = mapper2.findEmpByEmpno(1111);

System.out.println(empByEmpno1);

sqlSession2.close();

}

缓存标签属性

  • eviction:表示缓存回收策略,默认是LRU

  • LRU:最近最少使用的,移除最长时间不被使用的对象

  • FIFO:先进先出,按照对象进入缓存的顺序来移除

  • SOFT:软引用,移除基于垃圾回收器状态和软引用规则的对象

  • WEAK:弱引用,更积极地移除基于垃圾收集器状态和弱引用规则的对象

  • flushInternal:刷新间隔,单位毫秒

默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新

  • size:引用数目,正整数

代表缓存最多可以存储多少个对象,太大容易导致内存溢出

  • readonly:只读,true/false

  • true:只读缓存,会给所有调用这返回缓存对象的相同实例,因此这些对象不能被修改。

  • false:读写缓存,会返回缓存对象的拷贝(序列化实现),这种方式比较安全,默认值

@Test

public void test05() {

SqlSession sqlSession = sqlSessionFactory.openSession();

EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);

Emp empByEmpno = mapper.findEmpByEmpno(1111);

System.out.println(empByEmpno);

sqlSession.close();

SqlSession sqlSession2 = sqlSessionFactory.openSession();

EmpMapper mapper2 = sqlSession2.getMapper(EmpMapper.class);

Emp empByEmpno2 = mapper2.findEmpByEmpno(1111);

System.out.println(empByEmpno2);

Emp empByEmpno3 = mapper2.findEmpByEmpno(1111);

System.out.println(empByEmpno3);

Emp empByEmpno4 = mapper2.findEmpByEmpno(7369);

System.out.println(empByEmpno4);

Emp empByEmpno5 = mapper2.findEmpByEmpno(7369);

System.out.println(empByEmpno5);

sqlSession2.close();

}

总结

特性:

  • 1.默认开启了,没有实现

  • 2.作用域:基于全局范围,应用级别。

  • 3.缓存默认实现类PerpetualCache ,使用map进行存储的但是二级缓存根据不同的mapper命名空间多包了一层map

  • 4.事务提交的时候(sqlSession关闭)

  • 5.先从二级缓存中获取,再从一级缓存中获取 *

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

完结

Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

[外链图片转存中…(img-kDAELvph-1712892960041)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-lPI4piHP-1712892960042)]

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以在Java应用程序中使用MyBatis框架来简化数据库访问。MyBatis使用XML配置文件来映射Java对象到数据库表中的记录,这些XML文件描述了如何执行SQL查询和更新操作。MyBatisXML文件通常包括mapper接口和对应的SQL语句。这些SQL语句可以使用参数和结果映射来执行数据库操作,并将结果映射回Java对象。 ### 回答2: MyBatis 是一种开源的持久层框架,它可以与 Java 应用程序集成,用于简化数据库操作。在 MyBatis 中,我们可以使用 XML 文件来配置 SQL 语句,这种方式被广泛应用。 首先,使用 MyBatisXML 文件可以将 SQL 语句与 Java 代码进行分离,使得代码更加清晰和易于维护。通过将 SQL 语句写在 XML 文件中,开发人员可以将精力集中在 Java 代码的编写上,而不用关注 SQL 语句的书写和优化。这样可以提高开发效率,并且降低了出错的概率。 其次,使用 XML 文件配置 SQL 语句还可以实现动态 SQL。在 MyBatis 中,我们可以通过使用 XML 文件中的标签(如 if、choose、foreach 等)来实现根据不同条件生成不同的 SQL 语句。这样可以根据具体的业务需求来动态生成 SQL 语句,而不需要写大量的重复代码。 此外,MyBatis 中的 XML 文件还可以用于配置数据库连接信息、结果映射、数据源、事务管理等。通过配置 XML 文件,开发人员可以方便地进行数据库连接和事务的管理,而不需要手动编写繁琐的数据库连接和事务代码。 总结来说,MyBatis 使用 XML 文件的方式可以简化数据库操作,并且使代码更加易读、易维护。使用 XML 文件可以将 SQL 语句和 Java 代码分离,实现动态 SQL,并提供了方便的配置选项,使得开发更加高效。 ### 回答3: MyBatis是一种流行的Java持久化框架,它使用XML文件来配置持久化操作。在MyBatis中,我们可以通过编写XML文件来定义数据库操作的SQL语句。 XML文件是MyBatis中最重要的配置文件之一,它包含了数据源的配置、SQL语句的定义以及结果映射等信息。使用XML文件可以帮助我们更好地组织和管理SQL语句,使得代码更加清晰和易读。 在XML文件中,我们首先需要配置数据源的相关信息,例如数据库的连接URL、用户名、密码等。这些信息将用于建立数据库连接。 接下来,我们可以定义SQL语句。在XML文件中,我们使用<sql>标签来定义SQL语句。通过使用<insert>、<update>、<delete>和<select>等标签,我们可以定义不同类型的SQL操作。在这些标签中,我们可以指定SQL语句的名称、类型以及具体的SQL语句内容。 另外,我们还可以在XML文件中定义结果映射。结果映射用于将查询结果映射为Java对象。我们可以通过使用<resultMap>标签来定义结果映射,通过指定查询返回的列与Java对象中属性的对应关系来实现映射。 最后,在Java代码中使用MyBatis时,我们需要通过读取XML文件来获取配置信息,并根据配置信息建立数据库连接。通过执行SQL语句,我们可以实现对数据库的增删改查操作。在执行SQL语句时,MyBatis会将XML文件中定义的SQL语句解析成具体的SQL语句,并将返回结果映射为Java对象。 总之,使用XML文件是MyBatis的一种常见配置方式,它可以帮助我们更好地组织和管理SQL语句,并将查询结果映射为Java对象。通过使用XML文件,我们可以更加灵活地配置和使用MyBatis框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值