一、对ORM框架的理解
Mybatis【半ORM,因为需要自己写SQL】、Hibernate【全ORM-HQL,确实灵活度】。JPA相当于Hibernate、MyBatisPlus和Mybatis差不多。
ORM(Object Relational Mapping,对象关系映射)框架用来做实体类和数据库数据之间做映射,通过操作实体类就可以间接操作数据库。
Mybatis框架并不能提高数据操作效率问题!!!
二、JDBC、JdbcTemplate和Mybatis的区别
JDBC用于在程序中访问数据库的API。它需要开发人员手动编写SQL和处理数据库连接等操作,以提高数据库性能。
JdbcTemplate:是Spring框架提供的一个简化JDBC操作的模板类,通过简化了的API,使得对数据库的操作更加便捷,从而减少了开发人员的工作量。
Mybatis:是一个持久层框架,通过xml配置或注解方式进行SQL映射,提供更加灵活的方式来操作数据库,同时支持动态SQL和缓存等功能。
三、如何提高数据库操作效率?
(一)数据库索引优化
(二)查询优化
(三)数据库表结构优化
(四)缓存机制
(五)批量操作
(六)数据库连接池
四、Mybatis中的缓存机制
用户提交数据->先从缓存中获取数据->命中缓存则直接返回,否则查询数据库同时存入缓存并返回结果。从缓存中获取数据时先从二级缓存中获取如果没有再从一级缓存中获取数据。
一级缓存是SqlSession级别(线程级别)的,默认开启。二级缓存是SqlSessionFactory级别(进程级别)的,默认关闭。二级缓存需要在settings配置文件开启并在mapper映射文件中添加 标签来开启二级缓存。
Mybatis中的缓存机制主要是在进行SQL查询时进行以提高查询性能,缓存机制是基于对象的缓存,缓存的是查询结果对象而不是查询到的结果集。缓存的对象会根据查询语句和参数生成一个缓存键,以便后续在缓存中进行查找和缓存结果。当执行更新操作时,会清空相关的缓存,以保证缓存数据的一致性。
五、Mybatis中如何避免缓存击穿和缓存雪崩
(一)什么是缓存击穿和缓存雪崩?
1.缓存击穿
热点数据的某个key在某一瞬间失效,导致大量请求直接打到数据库,造成数据库压力瞬间增大。
2.缓存雪崩
大量key在同一时间失效,导致大量请求直接打到数据库的现象。
(二)怎么解决缓存击穿和缓存雪崩?
1.缓存击穿
(1)使用分布式锁
在查询热点数据时,使用分布式锁确保在同一时间只有一个线程能够访问数据库并更新缓存,避免缓存击穿问题。
(2)设置永不过期
对于一些热点数据,可以设置成永不过期,从而避免缓存击穿和缓存雪崩问题。
(3)缓存预热
在系统启动时,提前将一些热点数据加载进缓存中,避免在高并发时发生缓存击穿和缓存雪崩问题。
2.缓存雪崩
(1)设置合理的缓存时间
给key的失效时间增加一个合适的随机值,避免发生缓存雪崩。
(2)设置永不过期
对于一些热点数据,可以设置成永不过期,从而避免缓存击穿和缓存雪崩问题。
(3)缓存预热
在系统启动时,提前将一些热点数据加载进缓存中,避免在高并发时发生缓存击穿和缓存雪崩问题。
六、查询操作的步骤
(一)Mybatis的实现
请求进来时,先通过SqlSessionFactory对象维护一个SqlSession对象(工厂模式)来处理请求,具体来说是SqlSession对象把请求交给执行器来处理,执行器在处理查询请求时是先从二级缓存中查询数据如果没有则从一级缓存中查询数据,如果命中缓存则直接返回,否则需要查询数据库,并将查询结果加进缓存后返回结果。
(二)Spring中的实现
通过给Mapper接口创建代理对象来实现。