Mybatis复习面试题

Mybatis

目录

1、什么是Mybatis

Mybatis是一种持久层的框架,是一种半ORM(对象关系映射),它内部封装了JDBC,开发时只需要关注sql语句本身即可;

Mybatis使用xml和注解的方式来映射数据信息,当执行完sql之后,会将执行结果映射到java对象并返回

2、Mybatis的优点

Mybatis的sql语句全部编写在xml配置文件中,方便管理和维护,降低了sql语句和java代码的耦合

Mybatis支持动态sql,可以根据业务进行sql性能优化

可以和Sping框架很好的整合

3、Mybatis框架的缺点

需要编写大量sql,对开发人员的sql水平要求较高

sql语句依赖数据库,导致数据库的可移植性比较差

4、Mybatis框架适用场合

对那些需要性能优化的大型项目

适合那些业务需求不确定经常变化的项目

5、Mybatis和Hibernate的区别

Mybatis需要编写原生的sql语句,因此它不属于Hibernate的ORM(对象关系映射)

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

# {} 是预编译处理

$ {}是字符串替换

Mybatis处理#{}时,sql语句取得就是{}里面的值(就是将#{}整体替换为占位符:?,调用PrepareStatement的set方法)

Mybatis处理${}时,sql语句取得就是加引号的{}中的值(把整体替换成变量的值)

7、实体类中的属性名和数据库字段名不一致怎么解决

通过sql语句的as关键字取别名

通过ResultMap结果集映射

8、模糊查询的like怎么写

%#{value}%

9、通常一个xml映射文件都会写一个Dao接口与之对应,那么这个Dao接口的工作原理是什么?Dao接口中的方法能够重载吗?

Dao层接口的全限定名是xml配置文件namespace的值

Dao层接口中的方法名就是xml配置文件sql标签的id的值

因此:全限定名+接口方法名能够唯一确定sql语句,所以Dao层接口中的方法不能够被重载

10、Mybatis如何进行分页的?分页插件的原理?

Mybatis是通过RowBounds来进行分类的,通过有参构造创建对应的实例对象来设置分页参数

11、Mybatis是如何将sql执行结果封装为目标对象并返回?都有哪些映射形式?

sql的执行结果通过数据库字段和对应实体类字段之间的关联映射来封装为目标对象

取别名

ResultMap结果集映射

12、Mybatis如何进行批量操作

一般就是通过动态sql的foreach标签

13、Mybatis如何获取自动生成的主键值

一般我们新增或者修改数据之后,直接查询数据库数据再封装为目标对象,最后getId即可

14、在mapper中如何传递多个参数

一般将参数封装为对应的目标对象,如果不能封装,则直接定义一个Map对象

15、Mybatis动态sql有什么用?执行原理?有哪些?

能够根据逻辑表达式的值来动态的拼接sql语句

执行原理:

动态sql:

16、xml映射文件,除了常见的增删改查标签外,还有哪些?

动态sql标签

17、为什么说Mybatis是半自动的ORM映射工具,和全自动有什么区别?

使用Mybatis框架需要我们手动编写存原生的sql语句,而全自动的ORM则是根据数据库字段和目标对象的映射关系来自动生成sql语句

18、一对一、一对多的关联查询

association:一对一(查询每一个学生以及每一个学生对应的老师)

collection:一对多(查询每一位老师以及每一位老师对应的多名学生)

19、Mybatis实现一对一有几种方式?具体怎么操作?

20、Mybatis实现一对多有几种方式?具体怎么操作?

按照查询嵌套处理:先查询所有学生信息,然后再根据学生信息查询对应的老师(一张表一张表来进行查询)

按照结果嵌套处理:先对两张表进行联表查询,然后再进行字段映射

21、Mybatis是否支持懒加载?如果支持,它的实现原理是什么?

支持一对一和accociation和collection对象的

22、Mybatis的一级和二级缓存

一级缓存:SqlSession,作用范围有限,只作用于当前会话,并不安全,使用完需要及时关闭

二级缓存:在Mybatis的核心配置文件中来开启二级缓存,每个xml配置文件都有一个数据自己的二级缓存,是namespace级别的缓存

23、什么是Mybatis的接口绑定?有哪些实现方式?

Mybatis的接口绑定本质上就是:接口中的方法和xml文件中的一条sql绑定

一种是通过注解的形式:在接口中的每个方法上添加增删改查对应的注解,在注解的参数中编写sql

一种是通过xml配置的形式,通过xml文件的namespace和sql标签的id属性值来唯一绑定接口中的唯一方法

24、使用Mybatis的mapper接口调用时有哪些要求?

xml配置文件的namespace的值为接口的全限定名

标签id的值为接口中的方法名

接口中方法的参数类型对应标签的参数类型paramterType

接口中方法的返回类型对应标签的返回类型resultType

25、Mapper编写有哪几种方式

一种是mapper扫描器

一种就是常用的编写mapper接口以及同名的xml配置文件,且必须在同一个包下

26、简述Mybatis的插件运行原理,以及如何编写一个插件

27、传统JDBC开发存在什么问题?

我认为传统的jdbc存在的问题就是编写sql语句比较复杂,如果业务场景非常复杂就需要进行大量的sql语句非常不方便且不容易维护和管理

28、JDBC编程有哪些不足之处,Mybatis是如何解决的?

29、Mybatis的编程步骤?

通过SqlSessionFactory来获取SqlSession

通过SqlSession来获取接口对象,接口对象调用对应方法来执行sql

最后提交事务,关闭SqlSession

30、Mybatis的工作原理?

Resource

SqlSessionFactoryBuilder

SqlSessionFactory

SqlSession

事务管理器

执行器

事务提交

关闭sqlSession

31、Mybatis的功能架构?

32、Mybatis的框架架构设计是怎么样的?

33、什么是DBMS

DBMS:DataBaseMangementSystem,是一种操作和管理数据库的软件;它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性

34、为什么需要预编译

35、Mybatis都有哪些Executor执行器?它们之间的区别是什么?

36、Mybatis中如何指定使用哪一种Executor执行器?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉水不好喝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值