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

OSCHINA-MIRROR/redkale-redkale

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
datasource.md 9.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 11:56 84b3ad0

DB数据源

DataSource — это абстрактный интерфейс для операций на уровне данных, который используется не только для реляционных баз данных, но и поддерживает такие источники данных, как память, Mongodb и ElasticSearch. Redkale имеет встроенную версию DataSource для работы с памятью, а официальная библиотека расширений «redkale-plugins» предоставляет реализации для Mongodb и ElasticSearch.

Почти все операции DataSource предоставляют синхронные и асинхронные методы. Асинхронный метод подходит для высокопроизводительных систем, например, с использованием DataSqlSource на основе vertx.

Комментарии

Комментарий Описание функции
@Column Помечает поле, соответствует использованию JPA
@Entity Помечает класс сущности, соответствует использованию JPA
@Id Помечает первичный ключ поля, соответствует использованию JPA
@Table Помечает псевдоним таблицы, соответствует использованию JPA
@Transient Помечает, является ли поле таблицей соответствия, соответствует использованию JPA
@VirtualEntity Используется для классов сущностей, которые не соответствуют таблицам базы данных, и применяется только в режиме кэширования DataSource
@DistributeTable Помечает таблицу для разделения таблиц и разделения библиотек, используется в сочетании с интерфейсом DistributeTableStrategy
@FilterColumn Используется для настройки полей класса FilterBean
@FilterJoinColumn Используется для настройки связанных полей таблицы класса FilterBean
@FilterGroup Используется для установки условий группировки фильтров класса FilterBean
@FilterOrs Используется для определения отношений между полями класса FilterBean с помощью «или»

Методы операций

Серия методов Описание функций
insert Вставляет сущность
delete Удаляет сущность
update Обновляет сущность
updateColumn Обновляет часть полей данных
find Находит отдельный объект
queryList Запрашивает коллекцию объектов List
querySheet Запрашивает набор объектов Sheet
getNumberXXX Запрос статистики, используемый для запроса суммы, максимального значения, среднего значения и других данных поля
queryColumnXXX Запрос данных отдельного поля и статистический запрос поля
nativeXXX Выполняет прямой SQL-запрос, используемый для сложных запросов соединения и обновления (ограничено DataSqlSource)

Конфигурация источника данных

redkale.datasource.platf.url = jdbc:mysql://127.0.0.1:3306/platf?serverTimezone=UTC&characterEncoding=utf8
redkale.datasource.platf.user = root
redkale.datasource.platf.password = pwd123

Зависимости pom

  • Использование драйвера JDBC:
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.2.0</version>
    </dependency> 
  • Для асинхронного сценария можно использовать vertx-mysql-client, требуется зависимость от официального пакета расширения «redkale-plugins»:
    <dependency>
        <groupId>org.redkalex</groupId>
        <artifactId>redkale-plugins</artifactId>
        <version>2.8.0</version>
    </dependency> 

    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-mysql-client</artifactId>
        <version>4.5.1</version>
    </dependency>

Вставка, удаление, изменение и запрос

@Data
@Table(name = "t_account")
public class Account {
    //男
    public static final short GENDER_MALE = 1;

    //女
    public static final short GENDER_FEMALE = 2;
    
    @Id
    @Column(name = "account_id")
    private String accountid;

    @Column(name = "account_name")
    private String accountName;

    private int age;
    
    private short gender;

    private String remark;

    @Column(name = "create_time", updatable = false)
    private long createTime;
}

Вставка нового объекта сущности:

    @Resource(name = "platf")
    private DataSource source;

    public void insertTest() {
        //Вставляем один объект
        Account account = new Account();
        account.setAccountid("account1");
        account.setAccountName("Hello");
        account.setCreateTime(System.currentTimeMillis());
        source.insert(account);

        //Асинхронно вставляем несколько объектов
        Account a1 = new Account();
        a1.setAccountid("account1");
        a1.setAccountName("Hello1");
        a1.setCreateTime(System.currentTimeMillis());
        Account a2 = new Account();
        a2.setAccountid("account2");
        a2.setAccountName("Hello2");
        a2.setCreateTime(System.currentTimeMillis());
        source.insertAsync(a1, a2);
    }

Удаление сущности:

    //Удаляем по первичному ключу
    Account account = new Account();
    account.setAccountid("account1");
    source.delete(account);

    //Фильтруем и удаляем, удаляем мужчин младше 16 лет
    //Эквивалентный SQL: DELETE FROM t_account WHERE age < 16 AND gender = 1;
    source.delete(Account.class, FilterNodes.lt(Account::getAge, 16).and("gender", GENDER_MALE));

Изменение объекта сущности:

    //Способ Lambda, обновляем одно поле по первичному ключу
    source.updateColumn(Account.class, "account1", Account::getRemark, "Новая заметка");

    //Способ Lambda, обновляем несколько полей по первичному ключу
    //Эквивалентный SQL: UPDATE t_account SET account_name='Новое имя', remark='Новая заметка', age=age+2 WHERE account_id='account1';
    source.updateColumn(Account.class, "account1",
        ColumnValue.set(Account::getAccountName, "Новое имя"),
        ColumnValue.set(Account::getRemark, "Новая заметка"),
        ColumnValue.inc(Account::getAge, 2)); //Возраст + 2

    //Обновляем несколько полей по первичному ключу
    Account account = new Account();
    account.setAccountid("account1");
    account.setAccountName("Новое имя"); ```
account.setRemark("新备注");
source.updateColumn(account, "accountName", "remark");
//或者
//等价sql: UPDATE t_account SET account_name='新名称', remark='新备注' WHERE account_id='account1';
source.updateColumn(account, Account::getAccountName, Account::getRemark);

//根据主键更新整个对象
Account one = new Account();
one.setAccountid("account1");
one.setAccountName("Hello1");
one.setCreateTime(System.currentTimeMillis());
source.update(one); //createTime不会被更新,因字段设置了@Column(updatable=false)

//过滤更新
//等价sql: UPDATE t_account SET remark = '不满16岁是青少年' WHERE age < 16;
source.updateColumn(Account.class, FilterNodes.lt(Account::getAge, 16),
    ColumnValue.set(Account::getRemark, "不满16岁是青少年"));

  批量操作:

Account a1 = new Account();
a1.setAccountid("account1");
a1.setAccountName("Hello1");
a1.setCreateTime(System.currentTimeMillis());

//事务性批量操作
DataBatch batch = DataBatch.create()
    .insert(a1)
    .updateColumn(Account.class, "account1", ColumnValue.set(Account::getRemark, "不满16岁是青少年"))
    .delete(Account.class, FilterNodes.lt(Account::getAge, 16).and("gender", GENDER_MALE));
source.batch(batch);

  查询实体对象:

//主键查询
//等价sql: SELECT * FROM t_account WHERE account_id = 'account1';
Account account = source.find(Account.class, "account1");

//等价sql: SELECT * FROM t_account WHERE account_name = 'Hello' AND age = 18 LIMIT 1;
Account one = source.find(Account.class, FilterNodes.eq(Account::getAccountName, "Hello").and(Account::getAge, 18));

//等价sql: SELECT * FROM t_account WHERE account_name = 'Hello' OR age = 18;
FilterNode filter = FilterNodes.eq(Account::getAccountName, "Hello").or(Account::getAge, 18);
List<Account> list = source.queryList(Account.class, filter);

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/redkale-redkale.git
git@api.gitlife.ru:oschina-mirror/redkale-redkale.git
oschina-mirror
redkale-redkale
redkale-redkale
main