Java ORM建议

时间:2012-06-14 18:29:52

标签: java orm

我是一名需要在Java中进行后端工作的长期前端开发人员。我熟悉CF和.Net中的数据库访问技术,但在Java方面没有太多经验。我正在构建一个必须由我自己或经验不足的开发人员支持的应用程序。

是否有一个相当简单的设置和易于理解的数据库访问系统的Java?我觉得Hibernate对我的团队来说太过分了,但直接的JDBC会让我重新发明轮子。

提前致谢, 罗伯特

7 个答案:

答案 0 :(得分:1)

JPA / Hibernate有很多替代方法,使用起来更简单。因为我是作者,所以我偏向sormula。您可以使用sormula选项,包括zero-configurationDAO basedactive recordcustom

答案 1 :(得分:1)

尝试ActiveJDBC:http://javalite.io/activejdbc。它是Java中的高性能轻量级ActiveRecord实现。随附您需要的一切(可能还有更多)。 快速举例:

CREATE TABLE people (
  id  int(11) NOT NULL auto_increment PRIMARY KEY,
  first_name VARCHAR(56) NOT NULL,
  last_name VARCHAR(56));

对应模型:

public class Person extends Model {}

查询:

List<Person> marks = Person.where("name = ?", "Mark");

保存:

Person p = new Person();
p.set("first_name", "John", "last_name", "Doe").saveIt();

还有更多内容,请访问:http://javalite.io/documentation

答案 2 :(得分:0)

尝试不同的东西,看看JDO。

答案 3 :(得分:0)

我亲自使用了丹尼尔建议的MyBatis,用于许多项目,这很棒。简单地说,MyBatis将SQL查询的结果表映射到Java对象,因此您仍然需要编写大量SQL。

在我看来,如果您的数据库架构与面向对象的设计不完全一致,MyBatis就很棒。我工作的项目之一有遗留数据库模式,要求我编写递归SQL来检索数据,而MyBatis在这方面的工作非常好。

答案 4 :(得分:0)

  

是否有一个相当简单的设置和易于理解的数据库访问系统的Java?

我的ORMLite package旨在满足这些特定要求 - 一个基于JDBC的简单层。您可以使用注释或以编程方式配置数据库实体。在尝试保持KISS时支持一些中级ORM功能。

示例实体:

@DatabaseTable(tableName = "accounts")
public class Account {
    @DatabaseField(id = true)
    private String name;
    ...

样本用法:

// this uses h2 but you can change it to match your database
ConnectionSource connectionSource =
       new JdbcConnectionSource("jdbc:h2:mem:account");
Dao<Account,String> accountDao =
       DaoManager.createDao(connectionSource, Account.class);
// create new table
TableUtils.createTable(connectionSource, Account.class);
// persist an instance of Account
Account account = new Account("Jim Smith");
accountDao.create(account);

答案 5 :(得分:0)

您可以根据域对象的键值架构尝试Ujorm框架。主要特点:

  • java编译器发现数据库查询中的大多数语法错误
  • 使用没有XML配置的java源代码轻松配置ORM模型
  • 延迟加载或关系的一个请求数据加载选项支持
  • 可以根据运行时中的Java元模型选择更新数据库表,列和索引
  • 没有代理或二进制修改的业务对象
  • 非常轻量级的框架,在运行时没有库依赖
  • 出色的表现

示例代码:

 Criterion<Item> crn1, crn2, criterion;  
 crn1 = Item.ID.whereGe(1L);  
 crn2 = Item.ORDER.add(NOTE).whereEq("My order");  
 criterion = crn1.and(crn2);  

 Session session = ormHandler.createSession();  
 for (Item item : session.createQuery(criterion)) {  
    Date created = item.getOrder().getDate();  
    System.out.println( item + " : " + created );  
 }
 session.close();

答案 6 :(得分:-1)

为MyBatis +1。如果您想完全控制您使用的SQL,这是一个不错的选择。