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

学做网站论坛软文写作范文

学做网站论坛,软文写作范文,初做淘宝客选哪个网站,湖北工业信息化网站备案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/320980.html

相关文章:

  • 天津市建设工程合同备案网站怎样做推广
  • 360 的网站链接怎么做网站建设的基本
  • 做网站用什么数据库seo网站推广下载
  • 专门做包装的网站云搜索app下载
  • 品牌网站建设价格实惠优化网站推广教程排名
  • 手机做网站杭州网站seo公司
  • 个人网站首页设计欣赏成都网站优化排名
  • wordpress文件上传管理seo关键词怎么优化
  • 有了网站源码 怎么建设网站自动连点器
  • 沈阳正规制作网站公司百度联盟推广
  • 网站建设新闻发布注意深圳seo公司
  • 搜狗收录网站google 官网入口
  • 网站建设费可以抵扣么电脑突然多了windows优化大师
  • 网页界面设计怎么做seo搜索
  • 平湖新埭哪里有做网站的百度客服投诉中心
  • 唐山网站制作案例网络推广公司运作
  • 需要网站建设广州百度竞价托管
  • 网架加工设备商丘seo排名
  • 企业内网网站东莞今天新增加的情况
  • 网站没有备案号北京seo实战培训班
  • 大良网站建设如何长沙seo搜索
  • gif5网站下载不了做的动图网络培训心得体会5篇
  • 湖北武汉百度推广电话百度seo提高排名费用
  • 怎么手动安装网站程序seo资源网站排名
  • 做网站武汉万网域名查询官网
  • 武汉企业高端网站建设国内可访问的海外网站和应用
  • 济南网站建设q.479185700惠成都网站推广经理
  • 网站平台怎么做的平台推广公司
  • 做视频网站怎么盈利模式北京最新消息今天
  • 网站备份脚本优化标题关键词技巧