MyBatis、MybatisPlus(⾯试常问)
⽂章⽬录
MyBatis概述matlab等高线颜标准
持久层解决⽅案(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的缓存。pcanywhere端口号
⾃定义缓存:⾃⼰写⼀个类,必须实现mybatis提供的cache接⼝,可以⾃定义为redis
机制:
web应⽤执⾏sql获取数据,mybatis会先从缓存中获取,如果没有,则发送sql查询数据库,返回结果,同时将结果放⼊缓存中。
MyBatis的重要标签?
<Mapper>标签的Namespace,此处和DAO接⼝的全类名应保持⼀致
<Select>标签的id和DAO接⼝的⽅法名⼀致,resultType为查询结果的返回类型(全类名)
<resultMap>标签,当表中的列名和实体类的属性名不⼀致,查询的结果中属性不能被⾃动赋值,使⽤<resultMap>和 <result>标签来映射
拜登重掌众议院
将查询select标签的resultType改成resultMap
<association>标签
多表连接:外键的使⽤,引⼊此表中不存在的列数据(将⼀个类作为另⼀个类中的属性(对象类属性))
在mapper中编写多表查询 以及 查询结果的映射关系
对象属性的属性和对应的列写到association标签中
条件查询<where> <if>标签
<;这个符号在xml⽂件中是⼀个特殊符号 需要使⽤<![CDATA[ ]]>特殊处理
<foreach>标签应⽤场景:批量删除 批量添加
collection:可选值有array或list
Item:循环遍历元素的变量名
separator:除了最后⼀次都拼接⼀个“,”
<collection>标签 可以映射集合类属性,如list
DAO的⽅法参数类型是int 或者String 时
Mapper⽂件中使⽤#{}获取DAO传递过来的参数值:#{随便写}
DAO的⽅法参数类型是实体类对象时
default属性Mapper⽂件中使⽤#{}获取DAO传递过来的参数值: #{实体类中的属性名}
DAO接⼝的⽅法中传递多个参数⽤@Param
Mybatis Plus
MyBatis Plus简介?
MyBatis-Plus是⼀个 MyBatis 的增强⼯具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提⾼效率⽽⽣。如果添加了MybatisPlus 的依赖但是不想使⽤MybatisPlus的类和⽅法这时候仍然可以按照之前使⽤Mybatis的步骤做开发⼏乎和之前没有任何的改变
使⽤
① 导⼊依赖,如果有注释掉之前mybatis的依赖
②如果MyBatis plus有⾃定义mapper⽂件,地址配置的由mybatis-mapper-locations改为mybatis-plus.mapper-locations
③ 给实体类加注解mysql面试题 增删改查
@TableName(“user”) 加载类上 将该类和数据库中对应的表建⽴联系 注解值为表名
@TableId(value = “对应表列名”,type = IdType.AUTO) 建⽴主键属性和主键字段之间的联系。 value 字段名, type 定义主键⾃增类型 IdType.AUTO MySQL⾃动递增
常规属性@TableField(“name”) 将常规属性和常规字段名建⽴联系编程出1000以内的所有完数
连表查询 封装数据的属性 没有对应的字段 需要定义忽略
@TableField(exist = false) exist = false代表当前属性在表中没有字段名
1. 创建实体类对应的dao接⼝ 继承 BaseMapper 就会拥有MybatisPlus所有默认⽅法,需要继承BaseMapper 泛型 即当前dao对应的
实体类
2. 条件构造器,分页插件,
连表查询不使⽤mybatis plus

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。