1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xnat-xjpa

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение

Обёртка лёгкого API для Hibernate.

Установка

<dependency>
    <groupId>cn.xnatural</groupId>
    <artifactId>jpa</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
<groupId>cn.xnatural</groupId>
<artifactId>jpa</artifactId>
<version>1.3.2-java8</version>
</dependency>

Использование

Создание Repo

// 1. Создать по jdbcUrl
Repo repo = new Repo("jdbc:mysql://localhost:3306/test?user=root&password=root").init();
// 2. Добавить свойства
Repo repo = new Repo(
        "jdbc:mysql://localhost:3306/test", "root", "root", 0, 5
).setAttr("hibernate.hbm2ddl.auto", "update")
.entities(Db.class).init();
// 3. Создать с помощью свойств
Map<String, Object> attrs = new HashMap<>();
attrs.put("jdbcUrl", "jdbc:mysql://localhost:3306/test?user=root&password=root");
attrs.put("hibernate.hbm2ddl.auto", "update"); //update: автоматическое обновление структуры таблицы в соответствии с сущностью, none: не обновлять
Repo repo = new Repo(attrs).entities(Db.class).init();

Запрос сущности

Запрос одной сущности

Db db = repo.byId(Db.class, "sys");
Db db = repo.row(Db.class, (root, query, cb) -> cb.equal(root.get("Db"), "sys"));
// По одному свойству
Db db = repo.byAttr(Db.class, "Db", "sys");

Запрос нескольких сущностей

List<Db> dbs = repo.rows(Db.class, (root, query, cb) -> cb.equal(root.get("Db"), "sys"));
// По одному свойству
List<Db> dbs = repo.rows(Db.class, "Db", "sys");

Пагинация

Page<Db> dbs = repo.paging(Db.class, 1, 10, (root, query, cb) -> cb.equal(root.get("Db"), "sys"));

Другие методы

// Сохранить или обновить сущность
repo.saveOrUpdate(сущность);
// Удалить сущность
repo.delete(сущность);
repo.delete(класс сущности, идентификатор сущности);
// Подсчитать количество сущностей
repo.count(класс сущности, условие (необязательно));
repo.count(класс сущности, «имя свойства», «значение свойства»);
// Проверить существование сущности
repo.exist(класс сущности, условие (необязательно));
repo.exist(класс сущности, «имя свойства», «значение свойства»);
// Получить все сущности
repo.all(класс сущности);

Операции с использованием SQL

Поддерживает только вопросительный знак? в качестве заполнителя.

Получить одну строку данных

// Одно значение
repo.row("select count(1) from db" Long.class);
// С параметрами
Map<String, Object> result = repo.row("select * from db where Db=?", "sys");
// Обернуть результат
Db result = repo.row("select * from db where Db=?", Db.class, "sys");

Пагинация

// Пагинация (List<Map>)
Page<Map> pageData = repo.paging("select * from db where Db=?", 1, 10, "sys");
// Пагинация: указать тип
Page<Db> pageData = repo.paging("select * from db where Db=?", 1, 10, Db.class, "sys");

Получить несколько строк данных

// Список Map по умолчанию
List<Map<String, Object>> results = repo.rows("select * from db limit ?", 10);
// Указать возвращаемый тип
List<Db> results = repo.rows("select * from db where Db=?", Db.class, "sys");
// Именованные параметры (условие in)
List<Map<String, Object>> results = repo.rows("select * from db where Db = ? and Db in (?)", "sys", Arrays.asList("sys"));

Обновить, вставить, удалить

// Обновить
repo.execute("update test set age=? where id=?", 11, "4028b881766f3e5801766f3e87ba0000");
// Вставить
repo.execute("insert into test values(?,?,?,?,?)", UUID.randomUUID().toString().replace("-", ""), new Date(), new Date(), 22, "name");
// Удалить
repo.execute("delete from test where id=?", "ad3e4ff8f3fd4171aeeb9dd2c0aa6f0c");

HQL

repo.doSession(session -> {
    return session.createQuery("from Test").list();
});

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

// Другие пользовательские запросы
repo.trans(session -> {
    // TODO
    // session.createQuery(hql);// hql-запрос
    return null;
});
// Транзакция: успех/неудача
repo.trans(session -> {
    // TODO
    // session.createQuery(hql);// hql-запрос
    return null;
}, () -> {
    // Успешное выполнение
}, (ex) -> {
    // Неудачное выполнение
});
repo.doSession(session -> {
    // Обработка в сеансе
});

Особенности интерфейса

Интерфейс версий EVersioning

  1. Добавляет версию к данным сущности, записывает каждое изменение.

  2. Журнал изменений хранится в OpHistory сущности. String name;

    private Integer version;

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    @Override public Integer getVersion() { return version; }

    @Override public void setVersion(Integer version) { this.version = version; }

    /**

    • 需要记录变更的内容 */ @Override public String content() { return JSON.toJSONString(this); } }

Удаление истории EDeleting

  1. Сущность данных была удалена (Repo#delete метод).
  2. Удалённые сущности будут записаны в OpHistory сущности.
@Entity
*public class* **DeleteEntity** *extends* NanoIDEntity *implements* EDeleting {
    *private* String name;

    *public* String getName() {
        *return* name;
    }

    *public void* setName(String name) {
        this.name = name;
    }

    /**
     * Нужно записать удалённый контент
     */
    **@Override**
    *public String* content() {
        *return* JSON.toJSONString(this);
    }
}

Обновление человека EUpdater

Добавить атрибут updater для сущности. Значение атрибута operator операции OpHistory версии берётся отсюда.

Создатель обновления ECreator

Добавить атрибут creator для сущности.

Другие полезные методы

// Запрос имени таблицы, соответствующей сущности
repo.tbName(实体Class);
// Получить текущий jdbcUrl соединения
repo.getJdbcUrl();
// Получить текущее имя базы данных (mysql)
repo.getDbName();
// Получить текущую информацию о версии базы данных
repo.getDBVersion();

Участие в проекте

xnatural@msn.cn

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Инкапсуляция единого интерфейса операций Hibernate. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xnat-xjpa.git
git@api.gitlife.ru:oschina-mirror/xnat-xjpa.git
oschina-mirror
xnat-xjpa
xnat-xjpa
master