qidao123.com技术社区-IT企服评测·应用市场

标题: JavaWeb编程面试题——MyBatis [打印本页]

作者: 半亩花草    时间: 2023-5-29 13:11
标题: JavaWeb编程面试题——MyBatis
引言

面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待。不以刷题进大厂为目的,而是以学习为目的。这里的知识点会持续更新,目录也会随时进行调整。
关注公众号:编程火箭车。在【粉丝福利】中点击【面题大全】,其中的Java面试题在线实时更新、查看。
一、面试题导航

点这里进入JavaWeb编程面试题——导航
面试题持续更新中......
二、面试题目

1.什么是MyBatis?

(1)MyBatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 SQL,可以严格控制 SQL 执行性能,灵活度高。
(2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
(3)通过 XML 文件或注解的方式将要执行的各种 statement 配置起来,并通过 Java 对象和 statement 中 SQL 的动态参数进行映射生成最终执行的 SQL 语句,最后由 MyBatis 框架执行 SQL 并将结果映射为 Java 对象并返回。(从执行 SQL 到返回 result 的过程)
2.MyBatis优缺点?

优点:
(1)基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在 XML 中,解除 SQL 与程序代码的耦合,便于统一管理。提供 XML 标签,支持编写动态 SQL 语句,并可重用;
(2)与 JDBC 相比,减少了50%以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接;
(3)很好的与各种数据库兼容(因为 MyBatis 使用 JDBC 来连接数据库,所以只要 JDBC 支持的数据库 MyBatis 都支持);
(4)能够与 Spring 很好的集成(MyBatis 官方提供与 Spring 的整合包);
(5)提供映射标签,支持对象与数据库的 ORM 字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
缺点:
(1)SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功底有一定要求。
(2)SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
3.MyBatis框架适用场合?

MyBatis 专注于 SQL 自身,是一个足够灵活的 DAO 层解决方案。对性能的要求很高,或者需求变化较多的项目,例如 Web 项目,互联网项目等等, MyBatis 都是不错的选择。
4.MyBatis框架原理?


5.MyBatis和Hibernate的区别?

(1)MyBatis 和 Hibernate 不同,它不是一个完全的 ORM 框架,因为 MyBatis 需要程序员自己编写 SQL 语句;
(2)MyBatis 直接编写原生态 SQL,可以严格控制 SQL 执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一旦有需求变化可以迅速输出成果。但是灵活的前提是 MyBatis 无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套 SQL 映射文件,工作量大。
(3)Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用 Hibernate 开发可以节省很多代码,提高效率。
6.MyBatis有哪些动态标签?

7.MyBatis中一对一如何实现?

在映射文件中 resultMap 元素里配置 association 节点,配置一对一的类就可以完成。
8.MyBatis中一对多如何实现?

在映射文件中 resultMap 里面配置 collection 节点,配置一对多的类就可以完成。
9.MyBatis编程步骤?

10.MyBatis的一级缓存和二级缓存?

11.#{} 和 ${} 区别?

12.Mybatis的mapper.xml文件中常用标签有哪些?
  1. <select>、<insert>、<update>、<delete>、<sql>、<resultMap>、<set>、<where>...
复制代码
13.Mybatis的xml映射文件中,不同的xml映射文件,id是否可以重复?

不同的xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复;原因就是namespace+id是作为Map的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。有了namespace,自然id就可以重复,namespace不同,namespace+id自然也就不同。
备注:在旧版本的Mybatis中,namespace是可选的,不过新版本的namespace已经是必须的了。
14.MyBatis 分页如何处理?

mybatis分页查询有两种方案:
15.Mybatis是如何进行分页的?分页插件的原理是什么?

Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
分页插件的基本原理是使用mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
16.如何获取自动生成的主键?

17.在mapper中如何传递多个参数?

第一种:直接多个参数
  1. // DAO层 接口
  2. User listUsers(String name, String sex);
复制代码
  1. <select id="listUsers" resulType="User">
  2.     select * from user where name=#{0} and sex=#{1}
  3. </select>
复制代码
第二种:使用@param注解
  1. // DAO层 接口
  2. User listUsers(@param("uname") String name, @param("usex") String sex);
复制代码
  1. <select id="listUsers" resulType="User">
  2. <select id="listUsers" resulType="User">
  3.     select * from user where name=#{uname} and sex=#{usex}
  4. </select>
  5. </select>
复制代码
第三种:多个参数封装成map集合
  1. // 映射文件的命名空间.sql片段的id,就可以调用对应的映射文件的SQL
  2. // 由于参数超过了两个,而方法中只有一个Object参数收集,因此我们使用Map集合来封装参数
  3. Map<String, Object> map = new HashMap<>();
  4. map.put("uname", "张三");
  5. map.put("usex", "男");
  6. sqlSession.selectList("user.listUsers", map);
复制代码
  1. <select id="listUsers" resulType="User">
  2. <select id="listUsers" resulType="User">
  3.     select * from user where name=#{uname} and sex=#{usex}
  4. </select>
  5. </select>
复制代码
18.使用mapper接口开发DAO时有哪些要求?

19.MyBatis的配置文件sqlMapConfig.xml中有哪些内容?

配置内容和顺序如下:
20.MyBatis中有哪些重要组件?

MyBatis是一个开源的Java持久化框架,它可以轻松访问关系数据库,将SQL语句和数据映射到Java对象中,并提供了很多高级特性。下面是MyBatis中的几个重要组件:
这些组件构成了MyBatis框架的核心,并提供了许多高效、易用、可扩展的特性,使开发人员可以轻松地进行数据访问和持久化操作。
关注公众号:编程火箭车
我们定期发布编程相关的文章、资讯、活动等内容。帮助编程爱好者、初学者或初级程序员快速入门、打牢基础。欢迎大家关注,和我们一起探索编程的精彩世界。我们定期发布编程相关的文章、资讯、活动等内容。帮助编程爱好者、初学者或初级程序员快速入门、打牢基础。欢迎大家关注,和我们一起探索编程的精彩世界。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4