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

OSCHINA-MIRROR/steven0lisa-xdao

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

Введение

Это небольшая библиотека DAO, предоставляющая удобный способ выполнения SQL.

Ну, на самом деле мне не нравится Mybatis, потому что мне часто приходится писать небольшие проекты, и каждый раз приходится использовать XML, что не очень приятно, поэтому я создал эту штуку.

Особенности:

  • Лёгкость, можно использовать эту библиотеку DAO независимо от того, какой инструмент управления базами данных вы используете: Hibernate, Mybatis и т. д.
  • Производительность, тонкая базовая упаковка.
  • Не поддерживает транзакции, не поддерживает поля больших объектов.

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

Инициализация проста:

XDAO.DataSource ds  = new XDAO.DataSource() {
    @Override
    public Connection getConnection() {
        // Здесь нужно вернуть Connection, рекомендуется заменить его пулом соединений вашего проекта
        try {
            // Пример подключения к базе данных H2
            Class.forName("org.h2.Driver");
            return DriverManager.getConnection("jdbc:h2:mem:play;MODE=MYSQL", "sa", "");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
};

// Устанавливаем источник данных в XDAO
XDAO.setDataSource(ds);

Например, в проекте есть модель:

import javax.persistence.Column;
import javax.persistence.Table;

@Table(name="person") // Необязательно, это в основном используется для решения проблемы несоответствия имени класса Java и имени таблицы базы данных
public class Person {

    public String id;

    @Column(name="name")
    public String name;

    @Column(name="create_time") // Необязательно, это в основном используется для решения проблемы несоответствия имени переменной Java и имени столбца базы данных
    public String createTime;
}

Создайте интерфейс PersonDAO в проекте:

@DAO // Помечаем @DAO, чтобы указать, что этот интерфейс является интерфейсом DAO, и он должен быть помечен
public interface PersonDAO {

    @SQL("create table person(id varchar(255) not null, name varchar(255), create_time bigint(20) not null default 0)") // Записываем SQL-запрос, необходимо пометить
    void createPersonTable();

    @SQL("insert into person(id, name, create_time) values(@1, @2, #now)") // @ означает параметр, который будет заменён на? в PreparedStatement
    void insertPerson(String id, String name);

    @SQL("insert into person(id, name, create_time) values(@1.id, @1.name, #now)") // @1.id означает, что значение параметра равно свойству id первого параметра метода
    void insertPersonObject(Person person);

    @SQL("select * from person where id=@1")
    Person findById(String id);

    @SQL("select * from person where id=@id and name=@name") // Можно изменить имя переменной SQL с помощью @SQLParam
    Person findByIdAndName(@SQLParam("id")String id, @SQLParam("name")String name);

    @SQL("select * from person") // Когда метод возвращает тип List и имеет указанный универсальный тип, инструмент DAO автоматически собирает результаты запроса и возвращает их
    List<Person> findAll();

    @SQL("select id from person") // Если вам нужна только одна колонка, вы можете написать так
    List<String> findAllId();

    @SQL("select count(*) from person") // Если метод возвращает тип Long или Integer, инструмент DAO рассматривает его как запрос count
    long countAll();

    @SQL(value="insert into person(id, name) values(@1.id, @1.name)", isBatch=true) // Когда SQL-запрос является оператором обновления, вставки или удаления, отметьте isBatch=true, и инструмент DAO будет рассматривать его как пакетную операцию
    int[] batchInsert(List<Person> persons);

    @SQL("select count(*) from person where id in (:ids)") // :ids означает развертывание параметра ids
    long countByUserIds(@SQLParam("ids") List<String> ids);

    @SQL("select * from $1 where name = @2") // $ означает макрос, который полностью заменит оператор SQL
    Person findByTableAndName(String tableName, String name);

    @SQL("select * from person") //where условие динамически устанавливается cnd = Cnd.where("name", "=", "steven").or("name", "=", "steven")
    Person findByCnd(Cnd cnd, PageInfo pageInfo);

    @SQL("select * from person where create_time > 0") //where условие динамически устанавливается (оператор SQL уже содержит условие where) cnd = Cnd.create().and("name", "=", "steven").or("name", "=", "steven")
    Person findCreateTimeNotEmptyByCnd(Cnd cnd, PageInfo pageInfo);
}

Вызов PersonDAO:

// Создаём экземпляр DAO через XDAO
PersonDAO dao = XDAO.get(PersonDAO.class);
// Вызов методов интерфейса напрямую
dao.createPersonTable();
dao.insertPerson("abc", "steven");
Person person = dao.findById("abc");
List<Person> persons = dao.findAll();
person = dao.findByCnd(Cnd.where("name", "=", "steven"), null);
person = dao.findByCnd(Cnd.where("name", "=", "steven"), Pager.get(dao.countAll())); // С разбивкой на страницы

Изменение журнала вывода

По умолчанию используются System.out и System.err. Если в проекте есть собственная система журналов, можно использовать следующий код:

XDAO.log = new XDAO.Logger(){
    //TODO Здесь реализуем несколько методов Logger
};

Зависимости

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0.2</version>
</dependency>

Компиляция

mvn package

Сгенерированный jar находится в каталоге target.

Несколько источников данных

В более крупных проектах часто требуется использовать несколько баз данных для разделения чтения и записи. XDAO позволяет разработчикам устанавливать несколько источников данных и указывать источник данных на интерфейсе DAO. Ниже приведён пример распространённого разделения чтения и записи (Master, Slave).

Инициализация:

XDAO.DataSource master  = new XDAO.DataSource() {
    @Override
    public Connection getConnection() {
        //

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

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

Введение

Простой инструмент DAO для Java Развернуть Свернуть
Отмена

Обновления

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

Участники

все

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

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