MyBatis框架技术

MyBatis是一个优秀的基于java的持久层(DAO)框架,它内部封装了JDBC,让开发者只需关注sql语句本身,而不再花费 精力去处理诸如注册驱动、创建connection、配置statement等繁杂过程。

MyBatis与Hibernate

hibernate框架提供了全面的数据库封装机制的全自动ORM,实现了pojo和数据库表之间的映射,以及sql语句的自动生成和执行。
mybatis是半自动ORM,着力点是在pojo类与sql的映射关系也就是说mybatis不会自动生成sql语句。

mybatis特点:
1.在xml文件中配置sql语句,实现了SQL语句与代码的分离。
2.需要程序员自己编写sql语句,比较灵活,效率比hibernate高,因为少了一层转换逻辑代码。
3.简单,易于学习,上手快。

mybatis体系结构
在这里插入图片描述
工作原理
mapper.xml为映射文件;mybatis.xml为主配置文件在这里插入图片描述
配置映射文件:
在这里插入图片描述

配置主配置文件:
在这里插入图片描述
mybatis工具类:
由于SqlSessionFactory占用资源非常大 所以创建为单例。
在这里插入图片描述

DAO实现类:
在这里插入图片描述
Mapper动态代理实现:
mapper.xml 的命名空间接口全限定名;
mapper.xml 子节点id值
接口方法;
通过这种映射关系可以实现mapper的动态代理实现。

查询缓存:
查询缓存主要是为了提高查询访问速度,将用户对同一数据的重复查询过程简化,不再每次都从数据库查询获取结果,提高访问数据。
查询缓存是基于配置文件的namespace的,不同的namespace数据互不干扰。
mybatis的查询缓存机制,根据缓存区的作用域与生命周期,可划分为两种:一级缓存与二级缓存。

查询缓存执行原理:
查询语句——缓存——数据库
在这里插入图片描述

一级缓存与二级缓存的不同之处:sqlsession一旦关闭,则sqlsession中的数据将不存在,一级缓存数据消失,二级缓存生命周期伴随整个应用的生命周期。

mybatis框架中默认即存在一级缓存。
一级缓存的依据:缓存的数据结构是Map,Map的值就是缓存的数据,查询的依据Key是sql语句的id+sql语句。
增删改对一级缓存的影响:增删改都会清空一级缓存。

内置二级缓存:
内置二级缓存的开启:
1)对需要缓存的实体类序列化
2)mapper.xml中加入 <cache/> 标签
增删改查对二级缓存的影响:
1.增删改同样会清空二级缓存,实质是对缓存map中的value置为null,而key依然存在
2.从DB中查询的条件是:缓存中不存在这个key或者key对应的value为null
二级缓存的配置<cache/>

<cache eviction="FIFO" flushInterval="10800000" readOnly="true" size="512'>

eviction:逐出策略。二级缓存达到最大值是,需要通过逐出策略将缓存中的对象移除,默认为LRU。常用有:FIFO,先进先出;LRU:未被使用的时间最长。
flushInterval:缓存刷新时间。
readonly:只读。
size:最大个数。

二级缓存使用原则:
1)多个namespace不要操作同一个表,多个namespace会产生多个二级缓存,当表中数据改变时会造成当前namespace对应的二级缓存之外的缓存数据失效而未刷新。
2)增删改多于查询时,会频繁刷新二级缓存,反而起不到提升性能的作用。

第三方缓存,Ehcahe二级缓存。

mybatis的注解式开发:
注解:
注解后面是没有分号的。
注解首字母是大写的,因为注解与类、接口是同一级别的。一个注解对应着一个@interface类。
通过mapper.xml文件映射改为通过注解映射,如下图(官方建议使用mapper.xml映射):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++业余爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值