目录
1.什么是MyBatis?
2.MyBatis存在哪些优缺点?
3.MyBatis中#{}和${}的区别
4.MyBatis 有哪几种 SQL 编写形式
5.MyBatis 怎么实现分页
6.MyBatis 如何防止 SQL 注入
7.MyBatis 延迟加载
8.MyBatis 中的缓存机制有啥用?
9.MyBatis 一级缓存和二级缓存的区别
10.MyBatis 都有哪些 Executor 执行器?它们之间的区别是什么?
11.MyBatis 如何指定Executor 执行器
12.为什么说MyBatis 是半自动的ORM映射工具?与全自动的区别?
13.Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
14.resultType和resultMap的区别?
15.MyBatis 动态sql有什么用?执行原理?有哪些动态sql?
MyBatis是一个优秀的持久层框架,半自动的ORM映射工具,对jdbc进行了封装
优点:
1.基于sql语句编程,相当灵活,不会对应用程序造成影响
2.能和各种数据库兼容
3.能和spring很好的集成
4.提供映射标签
缺点:
1.sql语句编写的工程量大
2.sql语句依赖于数据库,导致数据库移植性差
1.#{}是占位符,${}字符串替换,是拼接符
2.MyBatis在处理#{}时会替换成?号,处理${}时会替换成变量的值
3.使用#{}可以预防sql注入,提高安全性
支持三种
1.mapper文件中配置sql
2.注解式sql
3.通过@SelectProvider
来声明sql提供类
1.使用sql的limit做分页
2.使用插件
3.使用拦截器、
1.使用#{}来设置参数
2.正则表达式过滤非法字符
延迟加载:就是在需要用到数据时才进行加载
,不需要用到数据时就不加载数据。延迟加载也称懒加载;
1.可配置局部懒加载
2.可配置全局懒加载
做服务器的进程内部缓存,提高查询效率,降低数据库访问频率。Mybatis有三种缓存,一级缓存、二级缓存、第三方缓存EhCache,一级缓存时默认开启的,作用域时SqlSession。二级缓存默认关闭需要在配置中使用enableCache="true"开启,二级缓存时namespace作用域的。第三方缓存需要引入额外Jar包,并且在配置中开启二级缓存开关,配置第三方缓存的核心类。
1.一级缓存默认开启,二级缓存手动开启
2.一级缓存作用域是SqlSession级别,二级缓存是全局的
MyBatis 有三种基本的 Executor 执行器:
1.SimpleExecutor: 每执行一次 update 或 select,就开启一个 Statement 对象,用完立刻关闭 Statement 对象
2.ReuseExecutor:执行 update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使用,不存在就创建,用完后,不关闭 Statement 对象,可重复使用
3.BatchExecutor:执行 update(没有 select,JDBC 批处理不支持 select),将所有 sql 都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个 Statement 对象
在 MyBatis 配置文件中,可以指定默认的 ExecutorType 执行器类型,也可以手动给 DefaultSqlSessionFactory 的创建 SqlSession 的方法传递 ExecutorType 类型参数
Hibernate 属于全自动ORM映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动ORM 映射工具
不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复(原因就是namespace+id是作为Map的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。有了namespace,自然id就可以重复,namespace不同,namespace+id自然也就不同)
类的名字和数据库相同时,可以直接设置resultType参数为Pojo类。若不同,需要设置resultMap将结果名字和Pojo名字进行转换
MyBatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql。
执行原理是根据表达式的值完成逻辑判断并动态拼接 sql 的功能。
MyBatis提供了9种动态sql标签:trim、where、set、foreach、if、choose、when、otherwise、bind。