Mybatis 面试题

Mybatis 面试题

1、什么是mybatis?

mybatis 是一个ORM类型的半自动框架,对JDBC代码进行了封装,是一个与数据库打交道的持久层框架,可以通过XML和注解来配置原生信息,简化了开发。

2、mybatis的优缺点?

优点:基于xml编写sql,方便灵活,与JDBC相比,减少了代码冗余,很好的与不同的数据库兼容,能够很好的和spring框架集成。
缺点:SQL语句的编写能力要求较高,依赖与数据库,不同的数据的移植性较差,数据库不能随意更换。

3、 #{}和${}的区别是什么?

#{}:是预编译处理
KaTeX parse error: Expected 'EOF', got '#' at position 21: …符串替换 mybatis在处理#̲{}时,会将sql中的#{}替…{}时就是将${}替换为变量值。

4、当实体类的属性名和字段名不一致,怎么办?

1、可以在编写sql语句的时候给字段名取别名。
2、可以通过resultMap标签来映射字段名和实体类属性名的对应关系。

5、说一下resultMap和resultType。

① resultMap时手动提交,resultType时自动提交。
② resultMap是对外部外部定义别名时的引动,resultType是直接返回自己所需要的类型,resultMap和resultType不能够同时存在。
③ 当返回类型是resultMap时时,Map不能很好的表示领域模型,需要把它进一步转为对象,这取决于我们的需要来决定
④ 当返回的参数是resultType时,mybatis会将返回的Map里面的键值对,取出来赋给指定对象的相同属性。

6、如何在Mapper接口中传递多个参数?

① 可以将多个参数封装为Map。
② 或者使用@Param注解。
以上是常用方式。

7、mybatis的xml映射文件中,不同的xml的id是否可以重复?

如果不同的xml配置文件,配置了各自的namespace,那么id是可以重复的,因为mybatis是根据namespace+方法id来作为key来寻找队形的sql语句的。

8、mybatis的 一级、二级缓存,如何开启。什么样的数据适合缓存?
9、什么是mabatis的接口绑定,有哪些实现方式?

mybatis的接口绑定就是将mapper接口中的方法和sql语句进行绑定,在我们调用接口的使用使用的是对应的sql语句。
实现方式:
1、直接在Mapper接口的方法上加上注解如@Select。
2、通过xml来进行绑定,namespace是接口的全路径名,id则是对应方法名。

10、Hibernate和Mybatis的区别?

① 相同点:
都是对JDBC的封装,持久层框架,用于dao层的开发。
②不同点:
1、mybatis是一个半自动框架,配置java对象和sql查询结果的对应关系,多表关联配置简单。
2、 Hibernate是一个全表映射框架,配置java对象和数据库表的对应关系,多表关联系统配置复杂。
3、SQL的优化和移植性
Hibernate对sql语句封装,提供了日志、缓存、级联(级联比mybaits强大)等特性,此外还提供了HQL操作数据库,数据库的无关性支持好,但是会多消耗性能。但是SQL语句的优化比较麻烦。
Mybatis需要手动编写SQL,处理列表、动态生成表名、支持存储过程。开发量相对较大,不支持数据库的无关性,SQL语句优化方便。

11、Mybatis的功能架构是怎么样的?

1、读取mybatis的配置文件,配置mybatis的运行环境,例如数据库的连接信息。
2、加载映射文件,mybatis-config.xml可以加载多个映射文件,每个文件对应数据库中的一张表。
3、构造会话工厂:通过mybatis的环境等配置信息构建SqlsessionFactory。
4、创建会话对象:由会话工厂创建sqlSession对象,该对象中包含了执行sql语句的所有方法。
5、Executor执行器:mybatis底层定义了一个Exector接口来操作数据库,它将根据sqlSession传递的参数动态的生成需要执行的sql语句,同时负责查询缓存的维护。
6、MappedStatement对象:在Exector接口的执行方法中由一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。
7、输入参数映射:输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和对象类型。

12、mybatis是否支持延迟加载,如果支持。它的实现原理是什么?

mybatis仅支持association关联对象和collection关联集合对象的延迟加载,在mybatis配置文件中,可以配置是否延迟加载LazyLoadingEnabled=true | false
.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值