我有一个用户java程序,我希望在轻量级数据库(如Derby或Sqlite)中存储数据.我想在我的程序中使用数据抽象层.Hibernate似乎需要大量的配置,并且对我所需要的东西来说太过分了.什么是Hibernate的轻量级替代品?
如果使用注释,Hibernate需要零配置.它甚至可以在类路径中自动发现映射的bean!从简单性和功率的角度来看,我没有看到任何替代方案.
它也可以将自己暴露为JPA,这是(恕我直言)甚至更简单.
我的ORMLite库就是这样一种选择.它支持MySQL,Postgres的,微软的SQL Server,H2,德比,HSQLDB,和SQLite,并可以很容易地扩展到其他人.它使用注释来配置类,良好的Spring支持,灵活的查询构建器等.
它仍然需要XML配置,但看看MyBatis(以前的iBatis).
jOOQ附带了一个流畅的DSL,直接在Java中模拟SQL作为其主要目标的副作用:
源代码生成
完全支持标准SQL,包括SQL语言功能,如UNION,嵌套SELECT,所有类型的JOIN,别名(例如用于自联接)等
广泛支持非标准SQL,包括UDT,存储过程,特定于供应商的功能等.
请阅读本文中的jOOQ:http://java.dzone.com/announcements/simple-and-intuitive-approach ,或直接访问网站:http://www.jooq.org
(免责声明,我为jOOQ背后的公司工作)
Apache Commons DBUtils从JDBC编程中获取了大量重复的gruntwork.它需要很少的配置,易于学习.它不是一个ORM框架(就像Hibernate和其他框架所提到的那样),但它确实自动将SELECT列映射到Java成员字段以及其他重复的JDBC编程任务.它确实很轻巧.
你可以看看Ebean ORM. - 没有会话 - 延迟加载才有效 - 使用和学习更简单的API.
Cayenne对我有好处.相对容易理解并使其运行起来.我发现逆向工程部分特别迷人.可以使用GUI完成配置.
我可以提出apache empire-db.http://incubator.apache.org/empire-db/
Apache Empire-db是一个开源关系数据持久性组件,它允许数据库供应商独立的动态查询定义以及安全和简单的数据检索和更新.与大多数其他解决方案(如Hibernate,TopLink,iBATIS或JPA实现)相比,Empire-db采用了截然不同的方法,特别注重编译时安全性,减少冗余并提高开发人员的工作效率.
一个例子:
// 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);;