logo资料库

MyBatis面试题.pdf

第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
资料共21页,剩余部分请下载后查看
MyBatis面试题
1、什么是Mybatis?
2、Mybaits的优点:
3、MyBatis框架的缺点:
4、MyBatis框架适用场合:
5、MyBatis与Hibernate有哪些不同?
6、#{}和${}的区别是什么?
7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
8、 模糊查询like语句该怎么写?
9、通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Da
10、Mybatis是如何进行分页的?分页插件的原理是什么?
11、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
12、如何执行批量插入?
13、如何获取自动生成的(主)键值?
14、在mapper中如何传递多个参数?
15、Mybatis动态sql有什么用?执行原理?有哪些动态sql?
16、Xml映射文件中,除了常见select|insert|updae|delete标签之外,还有哪
17、Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
18、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
19、 一对一、一对多的关联查询 ? 
 20、MyBatis实现一对一有几种方式?具体怎么操作的?
21、MyBatis实现一对多有几种方式,怎么操作的?
22、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
 23、Mybatis的一级、二级缓存:
24、什么是MyBatis的接口绑定?有哪些实现方式?
25、使用MyBatis的mapper接口调用时有哪些要求?
26、Mapper编写有哪几种方式?
27、简述Mybatis的插件运行原理,以及如何编写一个插件。
MyBatis 面试题 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、Mybaits 的优点: (1)基于 SQL 语句编程,相当灵活,不会对应用程序或者数据 库的现有设计造成任何影响,SQL 写在 XML 里,解除 sql 与程序代 码的耦合,便于统一管理;提供 XML 标签,支持编写动态 SQL 语句, 并可重用。
(2)与 JDBC 相比,减少了 50%以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接; (3)很好的与各种数据库兼容(因为 MyBatis 使用 JDBC 来连 接数据库,所以只要 JDBC 支持的数据库 MyBatis 都支持)。 (4)能够与 Spring 很好的集成; (5)提供映射标签,支持对象与数据库的 ORM 字段关系映射; 提供对象关系映射标签,支持对象关系组件维护。 3、MyBatis 框架的缺点: (1)SQL 语句的编写工作量较大,尤其当字段多、关联表多时, 对开发人员编写 SQL 语句的功底有一定要求。 (2)SQL 语句依赖于数据库,导致数据库移植性差,不能随意 更换数据库。 4、MyBatis 框架适用场合: (1)MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解 决方案。 (2)对性能的要求很高,或者需求变化较多的项目,如互联网 项目,MyBatis 将是不错的选择。 5、MyBatis 与 Hibernate 有哪些不同?
(1)Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架, 因为 MyBatis 需要程序员自己编写 Sql 语句。 (2)Mybatis 直接编写原生态 sql,可以严格控制 sql 执行性能, 灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类 软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前 提是 mybatis 无法做到数据库无关性,如果需要实现支持多种数据 库的软件,则需要自定义多套 sql 映射文件,工作量大。 (3)Hibernate 对象/关系映射能力强,数据库无关性好,对于 关系模型要求高的软件,如果用 hibernate 开发可以节省很多代码, 提高效率。 6、#{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换。 Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值; Mybatis 在处理${}时,就是把${}替换成变量的值。 使用#{}可以有效的防止 SQL 注入,提高系统安全性。 7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 第 1 种: 通过在查询的 sql 语句中定义字段名的别名,让字段 名的别名和实体类的属性名一致。
第 2 种: 通过来映射字段名和实体类属性名的一 一对应的关系。
8、 模糊查询 like 语句该怎么写? 第 1 种:在 Java 代码中添加 sql 通配符。 string wildcardname = “%smi%”; list names = mapper.selectlike(wildcardname); 第 2 种:在 sql 语句中拼接通配符,会引起 sql 注入 string wildcardname = “smi”; list names = mapper.selectlike(wildcardname); 9、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, 请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法, 参数不同时,方法能重载吗?
Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace 的值;接口的方法名,就是映射文件中 Mapper 的 Statement 的 id 值;接口方法内的参数,就是传递给 sql 的参数。 Mapper 接口是没有实现类的,当调用接口方法时,接口全限名 +方法名拼接字符串作为 key 值,可唯一定位一个 MapperStatement。在 Mybatis 中,每一个