https://www.jianshu.com/p/12f5d9d7d8e1/

image.png
image.png
image.png

原生 JDBC
  • SQL 夹在 Java 代码块里,耦合度高导致硬编码内伤
  • 维护不易且实际开发需求中 sql 是有变化,频繁修改的情况多见

    Hibernate 和 JPA
  • 长难复杂 SQL,对于 Hibernate 而言处理也不容易

  • 内部自动生产的 SQL,不容易做特殊优化
  • 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。导致数据库性能下降

    MyBatis
  • sql 语句与代码分离,存放于 xml 配置文件中:

优点:便于维护管理,不用在 java 代码中找这些语句; 缺点: JDBC 方式可以用用打断点的方式调试,但是 Mybatis 不能,需要通过 log4j 日志输出日志信息帮助调试,然后在配置文件中修改。

  • 用逻辑标签控制动态 SQL 的拼接:

优点:用标签代替编写逻辑代码; 缺点:拼接复杂 SQL 语句时,没有代码灵活,拼写比较复杂。不要使用变通的手段来应对这种复杂的语句。

  • 查询的结果集与 java 对象自动映射:

优点:保证名称相同,配置好映射关系即可自动映射或者,不配置映射关系,通过配置列名 = 字段名也可完成自动映射。 缺点:对开发人员所写的 SQL 依赖很强。

  • 编写原声 SQL:

优点:接近 JDBC,比较灵活。 缺点:对 SQL 语句依赖程度很高;并且属于半自动,数据库移植比较麻烦,比如 mysql 数据库编程 Oracle 数据库,部分的 sql 语句需要调整。