@
kevinhwang 这个牛 B 吹大了。
如果非常熟练掌握 SQL 的情况下,复杂查询 JDBC 比 Hibernate 效率只会稍有提高。对于只有半瓢水的 SQL,再加上没什么数据库基础,又懒得去学习 JPA (或 Hibernate ) 的人,用 JDBC 或 MyBatis 写出来程序基本不可能比 Hibernate 还快。
另外,生产环境上,JPA/Hibernate 一般会将两层缓存打开(重复查询根本不访问数据库),用 JDBC 或者 MyBatis 查询性能好的说法基本上是不成立的(高并发的重复查询只会搞死数据库),谈什么与 Hibernate 相比了。而在生产环境中,查询操作数量是远远大于更改( insert, delete, update )操作。
JPA 是规范,Hibernate,OpenJPA, EclipseLInk 提供了 JPA 实现。三者除了标准的 JPA API 外,都有自己的扩展功能,其性能在运行环境中表现有差异。一般来讲,JPA 在应用服务器容器环境( Glassfish,Wildfly )中使用容器管理方式性能会更好一些,Spring 默认是不支持这种方式(当然,如果部署环境是标准应用服务器非 Tomcat 之类 Servlet 容器,也可以在 Spring 使用 Proxy 方式调用容器管理的 EntityManager,相信这里没多少人用过)。
@
yougy JOOQ 不错,提供了 Type safe 方式的 SQL 查询,推荐用它代替原始 JDBC 或者 Spring JdbcTemplate 或者 MyBatis。