Java ORM比较

jopen 8年前

作者简言

对自己的框架确定ORM的实现方案。要求尽量对开发友好,开发简单明了。

需求

1.自动创建Entity:根据Entity自动创建表,能够减少开发的工作量。
2.自动DAO:具备Template模板或者类似功能,对简单的内容能够以更少的代码实现。
3.简单的扩展或者强功能API:简单扩展,个人倾向支持SQL
4.支持cache:支持各种cache的扩展,包括但不限于java cache,memcache等
5.支持事务处理与控制:在Service层必要支持事务处理功能。

方案

1.Hibernate + HibernateTemplate
2.JPA+Hibernate
3.MyBatis+Mapping 4.JPA+MyBatis
5.JdbcTemplate
6.JPA+Hibernate + JdbcTemplate
7.JdbcTemplate + 改装

对比

Hibernate + HibernateTemplate

1.自动创建Entity:√
2.自动DAO层实现:√
Hibernate对于Spring来说具有hibernateTemplate,仅仅在配置文件中配置下,并在dao实现中进行注入即可
实现方面,需要自己写继承类或者泛型类,不过单一实现起来难度也不高,无需操作session
3.简单扩展:-
由于沿用Hibernate,扩展采用hibernate方式,比较复杂
4.支持cache:√ 在hibernate层面添加cache
5.支持事务处理与控制:√

JPA+Hibernate

1.自动创建Entity:√
2.自动DAO层实现:√
直接继承接口
3.简单扩展:X
不达标,尝试添加自动化的DAO,比较困难
4.支持cache:√
5.支持事务处理与控制:√

MyBatis+Mapping

1.自动创建Entity:X
复杂,必须使用xml进行配置,在映射回object
2.自动DAO层实现:X
比较复杂,需要继承接口,之后自己写xml配置文件的sql,该方面的优势是如果具有DBA则大优,还有我想吐槽,Mapping本意是降低代码量,全跑xml什么鬼
3.简单扩展:-
对应xml编写,熟悉比较简单,不熟悉比较复杂
4.支持cache:√
支持cache,但使用的是xml配置,比较适合具备DBA的人员进行使用,纯粹开发人员直接代码进行开发即可
5.支持事务处理与控制:√
支持Spring的@Transactional注解

JPA+MyBatis

1.自动创建Entity:X
2.自动DAO层实现:√
3.简单扩展:X
4.支持cache:√
5.支持事务处理与控制:√

JdbcTemplate

1.自动创建Entity:X
2.自动DAO层实现:X
需要自己实现自动化,不过已经很简单了
3.简单扩展:√
4.支持cache:√
5.支持事务处理与控制:√

JPA+Hibernate + JdbcTemplate

1.自动创建Entity:√
2.自动DAO层实现:√
3.简单扩展:√
通过JdbcTemplate进行扩展
4.支持cache:√
5.支持事务处理与控制:√

结论

也就是说,如果想要依据目前的需求改装jdbctemplate,需要实现自动创建entity表和自动DAO实现方面的内容。如果仅仅只是用来进行开发工作,JPA+Hibernate+JdbcTemplate的方案完全满足使用需求

来自:http://my.oschina.net/hava/blog/530980