https://www.jianshu.com/p/12f5d9d7d8e1/
原生 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 语句需要调整。