Java Mybatis面试题解析(下)

15. 说一下Mybatis的一级缓存和二级缓存?【重点】

考核点:Mybatis缓存。

答:

Mybatis的一级缓存是指SqlSession,一级缓存的作用域是SqlSession,Mybaits默认开启一级缓存;

在同一个SqlSession中,执行相同的SQL查询时;第一次会去查询数据库,并写在缓存中,第二次会直接从缓存中取;

SqlSession执行insert、update、delete等操作commit后会清空该SqlSession缓存。

二级缓存是mapper级别的,Mybatis默认是没有开启二级缓存的;

第一次调用mapper下的SQL去查询用户的信息,查询到的信息会存放该mapper对应的二级缓存区域;

第二次调用namespace下的mapper映射文件中,相同的sql去查询用户信息,会去对应的二级缓存内取结果;

如果调用相同namespace下的mapepr映射文件中增删改sql,并执行了commit操作,此时该缓存会清空。

总结:

一级缓存同会话,很少会重复查询,实用场景少;

二级缓存同namespace下(表级别缓存),执行更新操作,即清空缓存,所以实际应用场景一般使用三级缓存。

16. Mybatis动态SQL标签有哪些?分别是做什么的?【掌握】

考核点:动态SQL

答:

if 标签:

if标签通常用于WHERE语句、UPDATE语句、INSERT语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值。

foreach标签:

foreach标签主要用于在sql中对集合进行迭代。也常用到批量删除、添加等操作中。

choose标签:

MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。

当choose中所有when的条件都不满则时,则执行 otherwise中的sql。

类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。

where标签:

如果where标签包含的标签中有返回值的话,它就插入一个"where"。

此外,如果标签返回的内容是以AND或OR开头的,则它会剔除掉。

set标签:

使用set标签可以将动态的配置set关键字,和剔除追加到条件末尾的任何不相关的逗号。

trim标签:

格式化输出,也可以通过trim标签设定或忽略前后缀来实现格式化输出。

sql标签:

当多种类型的查询语句的查询字段或者查询条件相同时,可以将其定义为SQL片段,方便调用。

include标签:

用于引用定义的SQL片段。

17. 动态SQL中使用<where>标签与直接写where关键字有什么区别?【掌握】

考核点:动态SQL

答:

where关键字是SQL语句中的where子句,在Mybatis动态SQL中,若直接用where子句的话可能会导致SQL语法错误,查询失败;

where标签为MyBatis的动态语句,系统自动生成where子句,并且会自动去掉生成语句前面多出的"and|or"子串。

18. 循环标签有哪些属性?各自的作用是什么?【掌握】

考核点:动态SQL

答:

foreach:循环标记;

collection:设置循环的集合、注意接口方法参数需要使用@Param()指定取值的key,如果不设置,默认key="list";

item:设置循环中取值一个元素的变量名称;

separator:设置语句的分割符号;

open:设置语句开始部分的子串;

close:设置语句结束部分的子串;

index:取出元素的索引。

19. Hibernate和Mybatis的区别?【重点】

相同点:

都属于ORM 框架;

都是对JDBC 的封装;

都属于持久层的框架。

不同点:

Hibernate 是面向对象的,Mybatis是面向SQL的;

Hibernate全自动的ORM,Mybatis是半自动的ORM;

Hibernate查询映射实体对象必须全字段查询,Mybatis可以不用;

Hibernate有级联操作,Mybatis则没有;

Hibernate编写HQL查询数据库大大降低了对象和数据库的耦合性,Mybatis提供动态SQL,需要手写SQL,与数据库之间的耦合度取决于程序员所写的SQL的方法,所以Hibernate的移植性要远大于Mybatis;

Hibernate有方言跨数据库,Mybatis 依赖于具体的数据库;

Hibernate拥有完整的日志系统,Mybatis 则相对比较欠缺;

20. MyBatis的优点?【重点】

答:

基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除SQL与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用;

与JDBC相比,减少了50%以上的代码量,消除了JDBC 大量冗余的代码,不需要手动开关连接;

很好的与各种数据库兼容(因为MyBatis 使用JDBC 来连接数据库,所以只要JDBC支持的数据库MyBatis都支持);

能够与Spring很好的集成;

提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系。

21. MyBatis框架的缺点?【重点】

答:

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

SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值