mybatis课堂笔记总结

1.mybatis

 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
 Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
  总之,Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。

mybatis架构图:

mybatis架构图(课上老师所画)
对上图的了解分析:
(1)sqlMapConfig.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
(2)基于SqlSessionFactory可以生成SqlSession对象
(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4)Executor是SqlSession底层的对象,用于执行SQL语句
(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)
mybatis的执行过程如下:
在这里插入图片描述

2.mybatis的缓存机制

10.3.4.缓存应用实现过程分析
Mybatis 框架提供一种缓存机制,通过缓存的应用来提高查询性能,但可能会有一定的不一致(脏读)问题。Mybatis中的缓存提供一级缓存和二级缓存的实现,默认都是开启状态(可参考官网)。

1.Mybatis 一级缓存
Mybatis中的一级缓存有时又称为SqlSession级缓存,SqlSession关闭时一级缓存失效。是默认开启的.在同一个SqlSession内部多次执行同一个查询,后续的查询会从此缓存取数据,其查询架构如下图所示:
在这里插入图片描述

说明:一级缓存的实现可查看BaseExecutor类中的localCache属性。

2.MyBatis二级缓存

Mybatis中的二级缓存有时又称跨session缓存,可在多个sqlsession间共享数据,假如要使用二级缓存,可在对应的mapper文件中借助cache元素进行配置(可参考官方映射文件配置)。二级缓存是Mapper级别的缓存.多个SqlSession去操作同一个Mapper中的SQL语句,则这些SqlSession可以共享二级缓存,即二级缓存是跨SqlSession的。
在这里插入图片描述
配置:
1、在ssm框架下,找到SqlMapConfig.xml,然后加入以下代码

<settings>
    <!-- 开启二级缓存(默认是开的,这里写出来是为了方便代码维护) -->
    <setting name="cacheEnabled" value="true" />
</settings>

例如:
在这里插入图片描述

2、在需要开启的mapper.xml中,添加以下代码(在下方)

<!-- 开启本mapper所在namespace的二级缓存 -->
<cache><cache />

例如:
在这里插入图片描述

3、如果是只用了mybatis的话,就找到mybatis-config.xml,然后加入上面两步的代码

4、将po类实现Serializable接口

开启了二级缓存后,还需要将要缓存的pojo实现Serializable接口,为了将缓存数据取出执行反序列化操作,因为二级缓存数据存储介质多种多样,不一定只存在内存中,有可能存在硬盘中,如果我们要再取这个缓存的话,就需要反序列化了。所以建议mybatis中的pojo都去实现Serializable接口。

注:课堂笔记,供自己复习看和大家参考

发布了5 篇原创文章 · 获赞 0 · 访问量 1512

猜你喜欢

转载自blog.csdn.net/weixin_44786336/article/details/95652291