mybatis面试题(每日背诵版day05)

1.mybatis的优缺点

优点:

1.基于sql编程,相当灵活,不会对应用程序和数据库造成任何影响,sql写在xml里,解除与代码的耦合

2.消除了大量的冗余代码,不需要手动开关连接

3.很好的与各种数据库兼容

4.能与spring很好的集成

5.提供映射标签,支持对象与数据库的orm字段关系映射,支持对象关系组件维护

缺点:

1.sql语句编写的工作量大,尤其是当字段关联多表时,对开发人员编写sql语句的功底有一定要求

2.sql语句依赖于数据库,导致数据库移植性比较差,不能随意更换数据库

2.当实体类中属性名和表中字段名不一样,怎么办?

第一种:

通过sql语句中定义字段名别名,让字段名和实体类属性名一致

第二种:

使用resultMap来定义字段和属性映射关系

3.在xml映射文件中,除了常见的select|insert|update|delete之外还有那些标签

if、choose、when、otherwise、where、set

4.如何获取自动生成的主键值

使用usegeneratedkeys和keyProperty获取

第一个设置为true,第二个指定将获取的主键值封装到那个属性

5.使用mybatis的代理开发有哪些要求

定义sql映射文件同名的mapper接口,并且将Mapper接口和上去了映射文件放在同一个目录下

是指sql映射文件的namespace属性为mapper接口全限定名

在mapper接口中定义方法,方法名就是映射文件中的sql语句的属性值,并且保持参数类型和返回值类型一致

6.#{}和${}的区别

#{}是预编译处理,${}是字符串替换

mybatis在处理#{}时会将其替换成?,调用PreparedStatement方法来赋值

mybatis在处理${}时,就是把它替换成变量的值

使用#{}可以有效防止sql注入

7.mybatis是否支持延迟加载,原理是什么

mybatis支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询,在mybatis配置文件中配置lazyloadEnable=true就可以开启延迟加载,默认是关闭的

实现原理:使用CGLIB创建目标代理对象,在调用目标方法时,进入拦截器方法,发现目标方法时空值时,就会单独发送实现保存好的查询关联对象的sql,把对象查询出来,然后设置给目标方法中,这样就完成了目标对象的方法的调用

8.什么是mybatis的一级缓存和二级缓存

一级缓存:基于perpetualCache的HashMap本地缓存,其存储作用域为session,当session进行flush或者close之后,该session中的所有cache就将清空,默认打开

二级缓存:二级缓存基于namespace和mapper的作用域起作用,不是依赖于sqlsession,默认采用perpetualCache,HashMap存储

注意事项:

二级缓存需要缓存的数据实现serializable接口

只是会话提交或者关闭后,一级缓存中的数据才会转移到二级缓存中

可自定义存储资源

9.请说说mybatis的工作原理

1、读取mybatis配置文件:mybatis-config.xml为mybatis的全局配置文件,配置了mybatis的运行环境等信息,例如数据库连接信息

2、加载映射文件。该文件中配置了操作数据库的sql语句,需要在mybatis配置文件中加载,mybatis-config.xml文件可以加载多个映射文件,每个文件对应数据库中的一张表

3、构造会话工厂:通过mybatis的环境配置等信息构建会话工厂sqlsessionfactory

4、创建会话对象:由会话工厂创建selsession对象,该对象中包含了执行sql语句的所有方法。

5、executor执行器:mybatis底层定义了一个executor接口来操作数据库,他将根据sqlsession传递的参数动态的生成需要执行的sql语句,同时负责查询缓存的维护

6、mappedstatement对象:在executor接口的执行方法中有一个mappedstatement类型的参数,该参数是对映射信息的封装,用于存储要映射的sql语句的id、参数信息等

7、输入参数映射:输入参数类型可以是map、list等集合类型,也可以使基本数据类型和破击类型。输入参数映射过程类似jdbc对preparestatement设置参数的过程

8、输出结果映射:输出结果类型可以是map、list等集合类型、,也可以使基本数据类型和破击类型。输出结果映射过程类似jdbc对结果集的解

10.mybatis有哪些executor执行器?他们之间的区别是什么

有三种基本的executor执行器simpleExecutor、ReuseExecutor、BatchExecutor

simpleExecutor:每次执行一次update或者select,就开启一个statement对象,用完立刻关闭,是mybatis默认的执行器

ReuseExecutor:执行update或者select,以sql作为key查找statement对象,存在就使用,不存在就创建,用完后,不关闭statement对象,而是置于map<string,statement>内,供下一次使用。

BathExecutor:执行update,将所有的sql都添加到批处理中,等待统一执行,他缓存了多个statement对象,每个statement对象都是addBatch完毕后,等待逐一执行executeBatch批处理,与JDBC批处理相同

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值