# 面试系列 - MyBatis

本文准备了一系列MyBatis相关面试题及其答案。

什么是 MyBatis ?

  • 标准答案
    • MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  • 关键词
    • 持久层框架
    • 避免大量 JDBC 代码、手动设置参数以及获取结果集
    • 使用 XML 或注解把原生类型、接口、Java 对象映射为数据库中的记录

MyBatis 的优缺点 ?

优点

  • 标准答案
    • 1、与 JDBC 相比,减少了50%以上的代码量。
    • 2、MyBatis 是最简单的持久化框架,小巧并且简单易学。
    • 3、MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
    • 4、提供 XML 标签,支持编写动态 SQL 语句。
    • 5、提供映射标签,支持对象与数据库的 ORM 字段关系映射。
  • 关键词
    • 减少 JDBC 代码
    • 简单易学
    • SQL 与程序代码解耦
    • 支持动态 SQL
    • 提供映射标签

缺点

  • 标准答案
    • 1、SQL 语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写 SQL 语句的功底有一定要求。
    • 2、SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
  • 关键词
    • 需要编写大量 SQL
    • 可移植性差

MyBatis 适用场景 ?

  • 标准答案
    • MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。
    • 对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis 将是不错的选择。
  • 关键词
    • 要求性能
    • 需求变化多
    • 互联网

MyBatis 与 Hibernate 有哪些不同 ?

  • 关键词
    • 自动化程度, MyBatis 是半自动化,而 Hibernate 是全自动化
    • 可移植性, Hibernate 可移植性远远大于 MyBatis (因为 MyBatis 需要自己编写 SQL
    • 灵活性, MyBatis 灵活性比 Hibernate 高(因为 MyBatis SQL 是自己编写的 )
    • 简单易用性,MyBatis 占优
    • 代码量,Hibernate 占优
    • 缓存方面,

#{} 与 ${} 的区别是什么 ?

  • 标准答案
    • #{} 是预编译处理,${} 是字符串替换
    • MyBatis 在处理 #{} 时,会将 #{} 替换为 ? ,调用 PreparedStatementset 方法来赋值
    • MyBatis 在处理 ${} 时,会将 ${} 替换为变量的值
    • SQL 注入是发生在编译的过程中,#{} 可以有效的防止SQL注入
  • 关键词
    • 预编译
    • SQL 注入

模糊查询 like 语句怎么写 ?

  • 三种方法如下:
    • like '%${}%'
    • like "%"#{}"%"
    • like CONCAT('%', #{}, '%')
  • 总结:推荐第三种,第一种不能防止 SQL 注入,第二种不美观(哈哈)

本文完。

你可能感兴趣的:(面试,MyBatis)