1.对mybatis的理解 优点和缺点?
理解:mybatis是一个持久的,半orm的开源框架,它对jdbc进行了封装。主要实现的是输入输出的映射,sql语句写在xml里面,便于统一管理和维护。
Mybaits的优点:
- 1.简单易学,比较容易上手
- 2.sql语句写在xml里面,便于统一管理和维护。
- 3.减少代码的冗余量
- 4.对各种数据库的兼容性好
- 5.能与spring很好的整合
- 6.支持对象与数据库的ORM字段关系映射
缺点:
数据库的可移植性比较差
sql的书写量比较大
半orm:只能对输入输出结果进行性映射,不能对sql语句进行映射。
2.什么项目建议使用mybatis?
性能要求比较高,需求变化比较多的项目,例如互联网项目。
3.#{ } 和 ${ } 的区别
#{ }:相当于jdbc里面的 ‘?’ 占位符
KaTeX parse error: Expected 'EOF', got '#' at position 29: …接符 当传入的值是基本类型时,#̲{}中可以随便写,但{}中要写value,当是对象类型时,都要和对象的属性名对应
4.Mapper代理开发。
mapper代理开发,也就是接口开发。他有几个要求。
- 映射文件的namespace的值必须和接口文件的全路径名一致。
- 接口文件的方法名必须和映射文件的id一致。
- 接口方法的输入输出参数要和映射sql的输入输出参数相对应。
- 接口文件和映射文件同包切同名。
5.如何获取自增主键以及非自增主键?
MYSQL:
自增主键:通过selectKey标签的 LAST_INSERT_ID()方法获取
<selectKey keyProperty="id" order="AFTER" resultType="Integer">
SELECT LAST_INSERT_ID()
</selectKey>
//keyProperty:将查询到主键值设置到 parameterType 指定的对象的那个属性
//order:SELECT LAST_INSERT_ID() 执行顺序,相对于 insert 语句来说它的执行顺序
//resultType:指定 SELECTLAST_INSERT_ID() 的结果类型
非自增主键:通过selectKey标签的 UUID()获取
<selectKey keyProperty="Id" order="BEFORE" resultType="String" >
select UUID()
</selectKey>
Oracle使用序列来模拟自增
<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
select EMPLOYEES_SEQ.nextval from dual
</selectKey>
6.如何传递多个参数?
- 可以将参数封装成对象
- 可以将参数封装成map
- 使用注解
7.动态标签的作用以及有哪些?
- 灵活性:代码比较灵活
- 复用性:代码可以重复使用
Mybatis提供了9种动态sql标签:trim | where | set | foreach | if | choose | when | otherwise | bind。
8.级联查询有几种实现方式?
编写级联查询的sql语句,创建包装类。通过resultMap 配置association实现一对一的映射,
配置collection实现一对多的映射
9.mybatis缓存
- 一级缓存:一级缓存是sqlsession级别的,默认是开启的
- 二级缓存:二级缓存是mapper级别的,需要手动开启
- 执行顺序:先查询一级缓存,如果没有。再去二级缓存查找,如果二级缓存没有,再去数据库查找。
10.延迟加载(懒加载)。
-
Mybatis仅支持association关联对象和collection关联集合的延迟加载,
-
在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。
-
原理:先查询一个表,然后根据结果 在查询另一个表的