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

什么是移动应用开发seo收费

什么是移动应用开发,seo收费,大连精美网站制作,audio player wordpress 使用方法MyBatis 是一个优秀的持久层框架,它不仅简化了数据库操作,还提供了强大的缓存机制来提升查询性能。本文将深入探讨 MyBatis 的执行流程,并重点分析一级缓存和二级缓存的实现原理及其使用场景。 1. MyBatis 执行流程 MyBatis 的执行流程可以…

MyBatis 是一个优秀的持久层框架,它不仅简化了数据库操作,还提供了强大的缓存机制来提升查询性能。本文将深入探讨 MyBatis 的执行流程,并重点分析一级缓存和二级缓存的实现原理及其使用场景。

1. MyBatis 执行流程

MyBatis 的执行流程可以分为以下几个步骤:

1.1 加载配置文件

MyBatis 首先加载 SqlMapConfig.xml 配置文件,该文件包含了数据库连接信息、事务管理器配置、映射文件路径等。SqlMapConfig.xml 是 MyBatis 的核心配置文件,所有的全局配置都在这里定义。

<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="com/qcby/dao/UserMapper.xml"/></mappers>
</configuration>

1.2 创建 SqlSessionFactory

通过 SqlSessionFactoryBuilder 构建 SqlSessionFactory 对象,该对象是 MyBatis 的核心对象,用于创建 SqlSession

InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

1.3 创建 SqlSession

SqlSession 是 MyBatis 与数据库交互的会话对象,它提供了执行 SQL 语句、管理事务、获取映射器等方法。

SqlSession sqlSession = sqlSessionFactory.openSession();

1.4 执行 SQL 语句

通过 SqlSession 执行 SQL 语句,MyBatis 会根据映射文件(XXXMapper.xml)中的配置,将 SQL 语句与 Java 对象进行映射。

UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = userDao.findById(1);

1.5 提交或回滚事务

根据业务逻辑,决定是否提交或回滚事务。

sqlSession.commit(); // 提交事务
sqlSession.rollback(); // 回滚事务

1.6 关闭 SqlSession

操作完成后,关闭 SqlSession 以释放资源。

sqlSession.close();

2. MyBatis 缓存机制

MyBatis 提供了两级缓存机制:一级缓存二级缓存,用于提高数据库查询的性能。

2.1 一级缓存

一级缓存是 SqlSession 级别的缓存,默认开启。当 SqlSession 执行查询操作时,查询结果会被缓存到一级缓存中。如果再次执行相同的查询,MyBatis 会直接从缓存中获取结果,而不需要再次访问数据库。

一级缓存的生命周期与 SqlSession 相同,当 SqlSession 关闭时,一级缓存也会被清空。

SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user1 = userDao.findById(1);
User user2 = userDao.findById(1);
System.out.println(user1 == user2); // true,因为第二次查询从一级缓存中获取
sqlSession.close();
一级缓存失效的情况
  • SqlSession 不同:不同的 SqlSession 无法共享一级缓存。

  • 查询条件不同:即使 SqlSession 相同,查询条件不同也会导致缓存失效。

  • 执行了增删改操作:在两次查询之间执行了增删改操作,会导致一级缓存失效。

  • 手动清除缓存:调用 sqlSession.clearCache() 方法可以手动清除一级缓存。

2.2 二级缓存

二级缓存是 Mapper 级别的缓存,多个 SqlSession 可以共享同一个二级缓存。二级缓存默认关闭,需要在映射文件中手动开启。

开启二级缓存的条件
  1. 在核心配置文件中开启二级缓存

<settings><setting name="cacheEnabled" value="true"/>
</settings>
  1. 在映射文件中声明使用二级缓存

<mapper namespace="com.qcby.dao.UserDao"><cache/>
</mapper>
  1. 实体类实现序列化接口

public class User implements Serializable {private Integer id;private String username;// getter 和 setter 方法
}
  1. SqlSession 关闭或提交后生效:二级缓存的数据在 SqlSession 关闭或提交后才会写入缓存。

二级缓存失效的情况
  • 执行了增删改操作:在两次查询之间执行了增删改操作,会导致二级缓存失效。

二级缓存的配置

二级缓存可以通过 <cache> 标签进行配置,常用的配置参数包括:

  • eviction:缓存回收策略,默认是 LRU(最近最少使用)。

  • flushInterval:缓存刷新间隔,单位为毫秒。

  • size:缓存对象的最大数量。

  • readOnly:缓存是否只读,默认为 false

<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

2.3 缓存查询顺序

MyBatis 的缓存查询顺序如下:

  1. 先查询二级缓存:因为二级缓存中可能会有其他 SqlSession 查询出来的数据,可以直接拿来使用。

  2. 如果二级缓存未命中,再查询一级缓存

  3. 如果一级缓存也没有命中,则查询数据库

当 SqlSession 关闭时,一级缓存的数据会写入二级缓存。

3. 总结

MyBatis 提供了强大的缓存机制,能够有效提高数据库查询的性能。一级缓存是 SqlSession 级别的缓存,适用于单次会话中的重复查询;二级缓存是 Mapper 级别的缓存,适用于多个会话之间的共享数据。通过合理使用缓存,可以减少数据库的访问压力,提升系统的整体性能。

通过本文,你应该对 MyBatis 的执行流程、一级缓存和二级缓存有了更深入的理解。希望这些内容能帮助你在实际项目中更好地使用 MyBatis。


 

 

 

参考文献:

  • MyBatis 官方文档

  • MyBatis 缓存机制详解

相关推荐:

  • 深入理解 MyBatis 源码

  • MyBatis 高级用法

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

相关文章:

  • 朝阳网站优化好口碑关键词优化
  • 个人网站做跳转怎么弄如何进行网络推广
  • 手机建站免费seo网站排名优化公司
  • 有经验的网站建设推广创建网站步骤
  • 专业的网站开发团队《新闻联播》 今天
  • 用什么技术来做网站深圳外贸网络推广
  • h5如何做网站什么是关键词推广
  • 网上商城有哪些平台优化大师 win10下载
  • 自己做的网站网页打开速度慢深圳网站优化公司哪家好
  • 建设政府网站app搜索引擎优化seo什么意思
  • 完善网站建设工作总结东莞疫情最新消息今天中高风险区
  • 有个在家做的客服网站百度搜索首页
  • 叫任何一个人一个小时做网站免费广告推广软件
  • 网站建设详细合同范本永久免费客服系统软件
  • thinkphp开发企业网站营销策划书格式及范文
  • 专业的河南网站建设百度搜索引擎入口登录
  • gateface做网站福州百度关键词排名
  • 可以做问答的网站宠物美容师宠物美容培训学校
  • 政务网站建设实施方案做网络推广可以通过哪些渠道推广
  • 建网站公司联系方式18款免费软件app下载
  • 蓝杉网站建设公司长春网络推广优化
  • 营销型网站设计建设免费推广网站大全集合
  • 建设机械网站平台seo资讯
  • 网站做著作权网络营销推广目标
  • 网站设计证书温州网站建设制作
  • 单页网站做cpa北京seo方法
  • 做网站流量是什么游戏优化是什么意思?
  • 新闻类的手机网站怎么做百度联盟广告
  • 政府门户网站群建设项目安卓优化大师老版本
  • 网站空间一般有多大如何设计一个网站页面