MyBatis
1、啥是Mybatis?
答:半ORM框架、内部封装有JDBC
通过XML、注解来配置和映射原生信息
2、MyBatis的优缺点?
答:优点:基于SQL语句编写
与JDBC相比代码量减少
与各种库都有很好的兼容
缺点:编写工作量大
依赖数据库、移植性差
3、MyBatis的适用场合?
答:专注SQL本身,足够灵活的DAO层解决方案。
4、#{}和${}的区别?
答:编译预处理、字符串替换,能够防止SQL注入。
5、当实体类中的属性名和表中的字段名不一样的时候怎么办?
答:在SQL中定义字段名别名,让字段名别名与实体类的属性名相同
通过<resultMap>映射
6、模糊查询怎么写?
答;在Java代码中加入SQL通配符
在SQL语句中拼接通配符,但会引起SQL注入。
7、一个Xml映射文件对应一个Dao接口。这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
答:Dao接口就是mapper接口。接口的全限定名就是映射文件中的namespace,接口中的方法就是映射文件中的id。接口内的参数就是传递给SQL的参数。
namespace+id确定唯一的。
不能重装。namespace+id确定唯一的寻址方式。Mybatis使用的是JDK动态代理的方式。
8、MyBatis是如何进行分页的?分页插件的原理是什么?
答:RowBounds分页
9、MyBatis是如何将SQL执行结果封装为目标对象并返回的?都有哪些映射形式?
答:使用<resultMAp>
使用SQL列的别名功能,将列的别名作为对象属性名。
10、如何执行批量插入?
答:
13、如何获得自动生成的(主)键值?
答:insert()方法
14、在mapper中如何传递多个参数?
答:Dao层的函数
使用@param
多个参数封装成map
15、MyBatis的动态SQL有什么用?执行原理?有哪些动态SQL?
答:可以在Xml映射文件内,以标签的形式编写动态SQL,执行原理是根据表达式的值完成逻辑判断并动态拼接SQL的功能。
trim、where、set、for each、if、choose、when、other wise、bind
16、Xml映射文件中,除了除了常见的select、insert、update、delete标签之外,还有哪些标签?
答:
17、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪?
答:需要手动写SQL。
18、一对一、一对多的关联查询?
答:
19、实现一对一有几种方式?
答:联合查询、嵌套查询
20、实现一对多有几种方式?
答:联合查询和嵌套查询
21、Mybatis是否支持延迟加载?实现原理是啥?
答:支持,仅支持assocation和collection。
使用cglib。
22、Mybaits的一级缓存、二级缓存?
答:一级缓存:缓存的是HashMap,其作用域为Session
二级缓存的话:作用域在Mapper(namespace),默认不打开
23、什么是Mybatis的接口绑定?有哪些实现方式?
答:
24、使用Mybatis的mapper接口调用时有哪些要求?
答:接口方法名和mapper.xml中的id相同
接口方法的输入参数和mapper.xml中的parameterType相同
接口方法的输出参数和mapper.xml中的resultType相同
mapper.xml中的namespace就是mapper接口的类路径。
25、Mapper编写有哪些方式?
答:3种:接口实现类继承SqlSessionDaoSupport、
使用MapperFactortBean、
使用mapper扫描器
26、简述Mybatis的插件运行原理,以及如何编写一个插件?
答:仅针对ParameterHandler、ResultSetHandler、StatementHandler、Executor4个接口的插件。采用JDK动态代理。
实现Mybatis的interceptor接口,并复写intercept()方法,然后在给插件中编写注解用于指定要拦截哪个接口的哪些方法。