Java ORM для БД только для чтения - PullRequest
5 голосов
/ 16 августа 2010

Я знаю hibernate, но мне интересно, будет ли более легкий механизм ORM для только для чтения базы данных. Я имею в виду, мне не нужны транзакционные запросы или обновления некоторых записей. С другой стороны, мне нужно обработать большой список записей:

List<MyRecord> list= object.getMyRecords(); // list.size() > 1E7

Существует ли такой двигатель? Большое спасибо,

Pierre

Ответы [ 7 ]

2 голосов
/ 07 ноября 2012

Вы можете проверить JIRM (да, это бесстыдный штекер), который представляет собой ORM, ориентированный на использование неизменных объектов.

Он расположен прямо над Spring JDBC, поэтому, если вы используете Spring, очень маловероятно попробовать его.

Он также имеет очень хорошие шаблоны-заполнители SQL , для которых не требуется Spring.

Еще один проект, который вы должны оформить: jOOQ .

2 голосов
/ 23 августа 2010

Я думаю, вы должны рассмотреть MyBatis (IBatis 3) библиотеку ORM. Он соответствует требованиям от легких работ до тяжелых серийных работ. Таким образом, он будет очень хорошо соответствовать вашим текущим потребностям, и вам не повезет, если вам потребуется тяжелая работа из базовой библиотеки ORM.

1 голос
/ 19 августа 2010

Посмотрите на Ebeans , который является легким инструментом ORM:

  • Повторно использует аннотации JPA (@Entity, @OneToMany ...) для отображения.
  • Использует архитектуру Session Less (т. Е. Имеет более простой API, чем JPA).
  • Поддерживает неизменный объект значения.
  • Позволяет использовать ORM или реляционные функции
  • Заявки на предоставление хорошей большой запрос поддержка

Стоит посмотреть IMO.

1 голос
/ 18 августа 2010

Я тоже искал в Lite ORM один проект около года назад. И попробовал пару из них. Я был немного недоволен всеми решениями, потому что каждое из них пыталось двигаться в определенном направлении.

Гибернация огромна и может стать источником дополнительных неприятностей, когда вам нужно простое решение. В настоящее время я работаю над одним красивым проектом, в котором используется небольшой пользовательский слой над таблицами.

Вероятно, вы можете попытаться реализовать небольшой слой поверх вашей базы данных с помощью JDBC, используя некоторые шаблоны, такие как Active Record или Table Gateway и т. Д.

Любое решение ORM просто пытается быть очень унифицированным и рекламирует дополнительные хвосты для вашего проекта. Но вы можете создать свое собственное решение без слоя - это будет особенно хорошо работать, если в вашей базе данных есть предопределенный набор таблиц, и она не меняет свою структуру слишком часто.

1 голос
/ 17 августа 2010

Если вы ищете легковесный каркас ORM, смотрите не дальше, чем OrmLite .Это позволяет избежать большинства накладных расходов при настройке более сложных сред ORM, таких как Hibernate.Недостатком этого фреймворка является то, что он не поддерживает стандартные аннотации JPA, поэтому было бы нелегко заменить этот ORM на другой позже.

Я бы предложил попробовать OpenJPA которая представляет собой совместимую со стандартом JPA среду ORM, поддерживаемую фондом Apache.Это один из основных конкурентов Hibernate.У него немного больше накладных расходов на настройку, но у него есть то преимущество, что вы можете поменять его в будущем на другую JPA-совместимую среду (например, Hibernate), если она больше не соответствует вашим потребностям.

эти фреймворки также с открытым исходным кодом, что всегда является хорошей причиной для их использования.

0 голосов
/ 07 мая 2013

Если вы ищете легкий ORM, я бы порекомендовал JORM .Обратите внимание, что мой ответ предвзят, поскольку я один из авторов проекта.

Основными причинами, по которым мы решили написать облегченную альтернативу, являются (необходимость):

  • Конфигурация без проблем
  • Четкие определения транзакций
  • Управление памятью и скорость
  • Простое создание кода
  • Ручная настройка SQL

Короче;быстрое развитие.

Пример конфигурации

DataSource dataSource = new DataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/moria");
dataSource.setUsername("gandalf");
dataSource.setPassword("mellon");

Database.configure("moria", dataSource); // now there's a named database

Пример записи

@Jorm(database="moria", table="goblins", id="id")
public class Goblin extends Record {  
    public Integer getId() {
        return get("id", Integer.class);
    }
    public void setId(Integer id) {
        set("id", id);
    }
    public Integer getTribeId() {
        return get("tribe_id", Integer.class);
    }
    public void setTribeId(Integer id) {
        set("tribe_id", id);
    }
    public Tribe getTribe() {
        return get("tribe_id", Tribe.class);
    }
    public void setTribe(Tribe tribe) {
        set("tribe_id", tribe);
    }
    public String getName() {
        return get("name", String.class);
    }
    public void setName(String name) {
        set("name", name);
    }
}

Пример сопоставленных запросов

Goblin goblin = Record.findById(Goblin.class 42);

List<Goblin> goblins = Record.findAll(Goblin.class);Goblin bolg = Record.find(Goblin.class, new Column("name", "Bolg"));

Пример пользовательских запросов

Tribe tribe = new Tribe();
tribe.setId(1);
String name = "Azog";

Goblin azog = Record.select(
    Goblin.class,
    "SELECT * FROM goblins WHERE name = #1# AND tribe_id = #2:id#",
    name, // #1#
    tribe // #2#
);

Goblin bolg = Record.find(Goblin.class, "SELECT * FROM goblins WHERE name = #1#", "Bolg");
0 голосов
/ 22 августа 2010

SimpleJDBCTemplate Spring в сочетании с преобразователями результатов работал для меня чудесно в сценариях только для чтения, вы не получаете ненужных накладных расходов hibernate, все ваши псевдо-ORM-сопоставления связаны вместе, это настоящий выигрыш для таких сценариев.

...