2021年MyBatis核心面试题

2021年09月15日 阅读数:1
这篇文章主要向大家介绍2021年MyBatis核心面试题,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

首先Mybatis是一个优秀的持久层ORM框架,它对jdbc的操做数据库的过程进行封装,使得开发者只须要关注SQL自己。不须要花费精力去处理一些重复和繁琐的步骤。最后经过java对象和statement中的sql进行映射生成最终执行的sql语句。最后由mysql框架执行sql并将结果映射成java对象并返回。java

ORM:对象关系映射,简单点说就是将数据库中的表和java中的对象创建映射关系,可让咱们操做对象来间接的操做数据库。mysql

半ORM:在查询关联对象或关联集合对象时,须要手动编写sql来完成。sql

MyBatis编程步骤

  • 建立SqlSessionFactory
  • 经过SqlSessionFactory建立SqlSession
  • 经过sqlsession执行数据库操做
  • 调用session.commit()提交事务
  • 调用session.close关闭会话

MyBatis的工做原理

  • 读取MyBatis配置文件。(获取MyBatis的运行环境等信息)
  • 加载映射文件。(SQL映射文件,其中配置了操做数据库的SQL语句)
  • 构造会话工厂:经过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory
  • 建立会话对象:有会话工厂建立SqlSession对象,该对象包括了执行SQL语句的全部方法
  • Executor执行器:根据SqlSession传递的参数动态的生成须要执行的SQL语句,同时负责查询缓存的维护
  • Mappedstatement对象:用于存储要映射的SQL语句的id、参数等信息
  • 输入参数映射:参数类型能够为Map、List等集合类型也可使用基本数据类型和POJO类型
  • 输出结果映射:和输入相似。

MyBatis的优势

  • 基于SQL语句编程,至关灵活。SQL写在XML中,解除sql与程序代码的耦合,便于统一管理。提供XML标签,支持编写动态SQL语句,并可重用
  • 消除了 JDBC 大量冗余的代码,不须要手动开关链接;
  • 很好的与各类数据库兼容
  • 可以与 Spring 很好的集成;
  • 提供映射标签,支持对象与数据库的 ORM 字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

MyBatis框架的缺点

  • SQL 语句的编写工做量较大,尤为当字段多、关联表多时,对开发人员编写SQL 语句的功底有必定要求。
  • SQL 语句依赖于数据库,致使数据库移植性差,不能随意更换数据库。

MyBatis与Hibernate有哪些不一样

  • MyBatis是一个半ORM框架,须要本身编写sql语句,灵活性高,可是须要自定义多套sql映射文件,工做量大
  • Hibernate数据库无关性好,节省代码,提升效率

#{}和${}的区别

  • #{}:是预编译处理,会把sql中的#{}替换为?,调用PreoaredStatement的set方法来赋值
  • ${}:是字符串替换,用于标签属性值和sql内部,属于静态文本替换。把${}替换为变量的值。

使用#{}能够有效的防止SQL注入,提升系统的安全性 。数据库

当实体类的属性名和表中的字段名不一致如何处理

  • 经过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。编程

  • 经过缓存

模糊查询like怎么编写

  • 在Java代码中添加sql通配符
  • 在sql语句中拼接通配符(可是会引发sql注入问题)

一般一个Xml映射文件,都会写一个Dao接口与之对应。那么Dao接口的工做原理是什么。

Dao接口就是Mapper接口。安全

  • 接口的全限定名就是映射文件的namespace的值
  • 接口的方法名就是映射文件中Mapper的Statement的id值
  • 接口方法内的参数就是传递给sql的参数

Mapper接口是没有实现类的,当调用接口方法的时候,接口的全限定名+方法名拼接字符串做为key值,能够惟必定位一个MapperStatement。在MyBatis中,每个session