面试必备-什么是MyBatis?

MyBatis 是一个优秀的半ORM(对象关系映射)框架,它内部封装了 JDBC,使得开发者只需关注 SQL 语句本身,而无需处理诸如加载驱动、创建连接、创建 statement 等繁琐的过程。开发者可以直接编写原生态 SQL,从而严格控制 SQL 的执行性能,其灵活性也因此得到显著提升。

MyBatis 通过 XML 文件或注解的方式配置和映射原生信息,将 POJO 映射为数据库中的记录。因此,MyBatis 避免了几乎所有的 JDBC 代码及手动设置参数和获取结果集的麻烦。

MyBatis 的工作流程

  1. 配置 SQL 语句:通过 XML 文件或注解的方式将要执行的各种 SQL 语句(statement)配置起来。

  2. 映射参数:将 Java 对象和 statement 中 SQL 的动态参数映射起来,生成最终执行的 SQL 语句。

  3. 执行 SQL:由 MyBatis 框架执行 SQL。

  4. 结果映射:将 SQL 执行的结果映射为 Java 对象并返回。

MyBatis 的优点和缺点

优点

  1. 灵活性高:基于 SQL 语句编程,不会对应用程序或数据库的现有设计造成影响。SQL 写在 XML 里,解除 SQL 与程序代码的耦合,便于统一管理。

  2. 代码量减少:与 JDBC 相比,MyBatis 大大减少了代码量,消除了大量冗余代码,不需要手动开关连接。

  3. 数据库兼容性好:MyBatis 使用 JDBC 连接数据库,只要 JDBC 支持的数据库,MyBatis 都支持。

  4. 与 Spring 集成良好:能够很好地与 Spring 框架集成。

  5. 支持 ORM 字段映射:提供映射标签,支持对象与数据库的 ORM 字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

缺点

  1. SQL 编写工作量大:由于 SQL 语句需手动编写,尤其在字段多、关联表多时,对开发人员的 SQL 编写功底有较高要求。

  2. 数据库依赖性强:SQL 语句依赖于具体数据库,导致数据库移植性差,不便于随意更换数据库。

#{} 和 ${} 的区别

  1. 预编译与字符串替换:#{} 是预编译处理,MyBatis 会将 SQL 中的 #{} 替换为 ?,并调用 PreparedStatement 的 set 方法来赋值。${} 是字符串替换,MyBatis 将 ${} 替换为变量的值。

  2. 安全性:使用 #{} 可以有效地防止 SQL 注入,提高系统安全性。

实体类属性名和表中字段名不一致怎么办?

解决方法

  1. 字段名别名:通过在查询的 SQL 语句中定义字段名的别名,使字段名的别名和实体类的属性名一致。例如:

   <select id="getUser" resultType="User">
     SELECT id, user_name AS userName FROM users WHERE id = #{id}
   </select>

通过这种方式,我们可以有效地将表中的字段名映射为实体类中的属性名,从而保持代码的一致性和可读性。

希望这篇文章能帮助你更好地理解和使用 MyBatis。如果你有任何疑问或建议,欢迎在评论区留言讨论!

来源: 互联网
本文观点不代表源码解析立场,不承担法律责任,文章及观点也不构成任何投资意见。

赞 ()

相关推荐

发表回复

评论列表

点击查看更多

    联系我们

    在线咨询: QQ交谈

    微信:13450247865

    邮件:451255340#qq.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    微信