我有一个单用户的Java程序,希望它可以将数据存储在诸如Derby或Sqlite之类的轻量级数据库中。我想在程序中使用一个数据抽象层。Hibernate需要大量配置,对于我所需的功能来说有些过度。有没有比Hibernate更轻量级的替代方案?
我有一个单用户的Java程序,希望它可以将数据存储在诸如Derby或Sqlite之类的轻量级数据库中。我想在程序中使用一个数据抽象层。Hibernate需要大量配置,对于我所需的功能来说有些过度。有没有比Hibernate更轻量级的替代方案?
Hibernate如果使用注解的话,几乎不需要进行任何配置。它甚至可以自动发现类路径中映射的Bean!从简单性和功能强大方面来看,我认为没有比它更好的替代品。
它还可以作为JPA暴露出来,这甚至更加简单(在我看来)。
我的ORMLite库就是这样一种替代方案。它支持MySQL、Postgres、Microsoft SQL Server、H2、Derby、HSQLDB和Sqlite,并且可以轻松扩展到其他数据库。它使用注解来配置类,支持Spring,具有灵活的查询构建器等功能。
它仍需要XML配置,但是请看MyBatis(以前是iBatis)。
jOOQ是一款集源代码生成、完整支持标准SQL(包括UNIONs,嵌套SELECTs,各种JOINs,别名(例如自连接)等SQL语言特性)、广泛支持非标准SQL(包括UDT's,存储过程,供应商特定函数等)于一身的流畅DSL库,直接在Java中模拟SQL语句。
阅读关于jOOQ的文章:http://java.dzone.com/announcements/simple-and-intuitive-approach,或直接访问网站:http://www.jooq.org
(免责声明,我为jOOQ背后的公司工作)
Apache Commons DBUtils可以减少JDBC编程中的重复性工作,需要进行少量配置且易于学习。它不是ORM框架(例如Hibernate和其他提到的框架),但它确实自动将SELECT列映射到Java成员字段以及其他重复的JDBC编程任务。它肯定是轻量级的。
// Define the query
DBCommand cmd = db.createCommand();
DBColumnExpr EMPLOYEE_FULLNAME= db.EMPLOYEES.LASTNAME.append(", ")
.append(db.EMPLOYEES.FIRSTNAME).as("FULL_NAME");
// Select required columns
cmd.select(db.EMPLOYEES.EMPLOYEE_ID, EMPLOYEE_FULLNAME);
cmd.select(db.EMPLOYEES.GENDER, db.EMPLOYEES.PHONE_NUMBER);
cmd.select(db.DEPARTMENTS.NAME.as("DEPARTMENT"));
cmd.select(db.DEPARTMENTS.BUSINESS_UNIT);
// Set Joins
cmd.join(db.EMPLOYEES.DEPARTMENT_ID, db.DEPARTMENTS.DEPARTMENT_ID);
// Set contraints and order
cmd.where(EMP.LASTNAME.length().isGreaterThan(0));
cmd.orderBy(EMP.LASTNAME);;
我可能有点晚了,但是我在2010年发布了ActiveJDBC,这是ActiveRecord模式的ORM实现,比Hibernate更轻量级(只有10倍的依赖)且运行时至少快两倍,并且不需要任何配置或注释。