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