MyBatis、Mybatis Plus(面试常问)

文章目录

  • MyBatis概述
      • 啥是SqlSession及其作用?
      • Mybatis中取值方式有几种?各自区别是什么?
      • MyBatis的缓存机制?
      • 一级缓存:
      • 二级缓存:
      • MyBatis的重要标签?
  • Mybatis Plus
    • MyBatis Plus简介?
    • 使用

MyBatis概述

持久层解决方案(DAO),半自动化的ORM框架,SQL mapper.
MyBatis是一个ORM框架,底层封装了JDBC,简化对数据库的增删改查操作

啥是SqlSession及其作用?

sqlSession是mybatis框架中的一个对象,类似JDBC的Connection对象,是java程序端和数据库之间的会话
框架底层通过sqlSession对象,去执行sql语句,帮助我们实现增删改查操作

Mybatis中取值方式有几种各自区别是什么

Mybatis取值方式就是在Mapper文件中获取service传过来的值的方法,总共有两种方式,通过 $ 和 #

#{}只能绑定数据,底层采用的是?占位符赋值的方式,可以对SQL语句预编译,执行同构SQL效率高

${}可以绑定SQL语句中的任意内容,底层采用的是字符串拼接sql的方式,容易产生sql注入,如果需要一些字段名或者关键字(比如order by)需要用$

MyBatis的缓存机制?

作用:

减少web应用和数据库(磁盘)访问次数,提高查询效率,减轻数据库访问压力。
减轻数据库压力的思路:内存中数据的获取速度大于物理磁盘,可以将数据存到缓存中。

缓存的数据结构:

Mybatis的缓存实际上就是一个HashMap,key是真正执行的sql语句,value是缓存的结果。

一级缓存:

SqlSession级别的缓存,作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个 sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存

二级缓存:

mapper级别的缓存(也称之为SqlSessionFactory级别的缓存 对应一个mapper文件),其作用域是mapper的同一个namespace,两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的 数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存,需要在setting全局参数中配置开启二级缓存,mapper文件中增加标签,实体类实现序列化
当执行了增删改操作清空当前sql所对应的namespace的缓存

自定义缓存:自己写一个类,必须实现mybatis提供的cache接口,可以自定义为redis

机制:

web应用执行sql获取数据,mybatis会先从缓存中获取,如果没有,则发送sql查询数据库,返回结果,同时将结果放入缓存中。

MyBatis的重要标签?

标签的Namespace,此处和DAO接口的全类名应保持一致