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

OSCHINA-MIRROR/drinkjava2-jsqlbox

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

jSqlBox — это полнофункциональный открытый Java-инструмент для работы с базами данных, который не уступает другим инструментам в плане архитектуры, функциональности и простоты использования.

jSqlBox включает все функции, связанные с работой с базой данных, такие как DDL, пагинация, разделение на несколько баз данных или таблиц, декларативные транзакции, распределённые транзакции и связанные отображения запросов. Все эти функции включены в JAR-файл размером 1 МБ, который не зависит от сторонних библиотек.

Документация

Сравнение jSqlBox с другими инструментами для работы с данными (DAO)

См.: https://gitee.com/drinkjava2/jsqlbox/wikis/pages?sort_id=1010925&doc_id=92178, чтобы получить общее представление о функциях и особенностях jSqlBox.

Основные особенности

  1. Простая настройка без зависимостей от сторонних библиотек

В файле pom.xml добавьте следующую зависимость:

<dependency>
   <groupId>com.github.drinkjava2</groupId>
   <artifactId>jsqlbox</artifactId>  
   <version>5.0.15.jre8</version> <!-- Или последняя версия -->
</dependency> 
  1. Написание SQL непосредственно в Java

Самая большая особенность jSqlBox заключается в том, что он позволяет писать SQL прямо в коде Java. Вся его архитектура основана на этом принципе, что отличает его от других инструментов DAO. Преимущество написания SQL в Java заключается в низкой стоимости обучения: достаточно знать SQL, чтобы сразу начать использовать инструмент, что снижает сложность изучения. Использование jSqlBox не означает использование всех его функций. Во многих случаях SQL может решить бизнес-задачи, и нет необходимости внедрять сложные ORM.

DbContext db= new DbContext(dataSource);
db.exe("insert into users (", //
          " name ,", par("Sam"), //один параметр записывается в одну строку для удобства обслуживания
          notNull("address,", user.getAddress()), //проверка на пустые значения
      when(age>10, "age,", par(user.getAge())), //динамическое добавление фрагмента SQL на основе условия
          " address ", par("Canada"), //
          ") ", valuesQuestions()); //автоматическое добавление фрагментов values(?,?...?) в соответствии с количеством параметров

Хотя написание SQL в Java является распространённым подходом, существует не так много инструментов DAO, которые доводят эту концепцию до совершенства. Автор считает, что jSqlBox предлагает наиболее эффективный способ использования возможностей SQL, а также обеспечивает простоту изучения, гибкость и расширяемость при написании SQL.

  1. Поддержка рефакторинга SQL с помощью строковых констант или Q-классов
 QTbPriceSetting p=QTbPriceSetting.instance;
 DB.exe("insert into ",p," (", //
    p.id, ",", par(1200), //
    p.price, ",", par(80), //
    p.currency, ",", par("USD"), //
    p.created_at, par("2019-09-17 04:07:55"), //
    ")", valuesQuestions());

Q-классы или классы, содержащие строковые константы, могут быть созданы с использованием исходного кода jSqlBox. Кроме того, jSqlBox поддерживает экспорт структуры таблицы базы данных в формате Excel из базы данных или сущностей. См.: https://gitee.com/drinkjava2/jdialects/wikis/%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/5.4%20%E5%AE%9E%E4%BD%93%E6%88%96%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BB%93%E6%9E%84%E5%AF%BC%E5%87%BAExcel.

  1. Логичная архитектура с модульным подходом

jSqlBox имеет модульную архитектуру, которая разделяет функции на отдельные модули (jBeanBox, jDbPro, jDialects, jTransaction). Эти модули можно использовать отдельно от jSqlBox. Цель модульной архитектуры — изолировать функции и сделать их доступными для повторного использования в других инструментах. Например, если вы хотите использовать только модуль jDialect для работы с диалектами баз данных, добавьте следующее в файл pom.xml вашего проекта:

<dependency>
    <groupId>com.github.drinkjava2</groupId>
    <artifactId>jdialects</artifactId>
    <version>5.0.13.jre8</version> <!--или последняя версия-->
</dependency>
  1. Широкий спектр функций, поддерживаемых модулем jDialects

Модуль jDialects поддерживает более 80 различных баз данных и предоставляет функции, такие как генерация скриптов DDL для создания таблиц, генерация кода сущностей из структуры базы данных, преобразование функций в зависимости от диалекта, генерация первичных ключей и т. д. Пример: следующий SQL-запрос может использоваться в различных базах данных без необходимости изменения исходного кода. Модуль jDialects автоматически обрабатывает генерацию DDL и перевод функций в зависимости от используемого диалекта.

DB.exe(DB.gctx().toCreateDDL(HelloWorld.class)); //создание DDL на основе сущности для создания таблицы
String sql=DB.trans("select concat('a','b','c'), current_time() from user_tb where age>0"); //перевод функций SQL в зависимости от диалекта
DB.qryString(sql, " and price>100", pagin(1, 10));  //разбиение на страницы для любой базы данных путём передачи объекта pagin
  1. Простой ActiveRecord

Наследование класса ActiveRRecord или реализация интерфейса ActiveEntity позволяют реализовать шаблон ActiveRecord:

public class User implements ActiveEntity{
 @UUID
 private String id;
 private String name;
 //геттеры и сеттеры ...
}

//ActiveRecord
new User().loadById("张三").setUserAge(13).update(); 
  1. Мощный параметрический дизайн

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

SqlTemplateEngine TEMPLATE = BasicSqlTemplate.instance()
ctx2.exe(TEMPLATE, "update users set name=#{user.name}, address=:user.address",

``` **Совместимость с основными JPA аннотациями, поддержка динамического изменения конфигурации в процессе выполнения**

Для удобства изучения jSqlBox совместим с основными аннотациями JPA для сущностных классов: @Entity, @Transient, @UniqueConstraint, @GenerationType, @Id, @Index, @SequenceGenerator, @GeneratedValue, @Table, @Column, @TableGenerator, @Version, @Enumerated, @Convert, @Temporal.

jSql также имеет несколько специальных аннотаций для сущностей, таких как CreatedBy, LastModifiedBy, ShardTable, ShardDatabase и Snowflake.

В jSqlBox можно динамически изменять конфигурацию связей сущностей во время выполнения. Например, можно настроить UUID32 первичный ключ для класса PojoDemo и изменить отображение поля name на поле address:

TableModel m = TableModelUtils.entity2Model(PojoDemo.class); m.column("id").pkey().uuid32(); m.column("name").setColumnName("address"); TableModelUtils.bindGlobalModel(PojoDemo.class, m);


**Поддержка мультиарендности, репликации главный-подчиненный, разделения базы данных и таблиц**

jSqlBox поддерживает мультиарендность, репликацию главный-подчинённый и разделение базы данных и таблиц. Помимо использования аннотации Sharding для сущностей, jSqlBox также позволяет передавать методы разделения базы данных и таблиц непосредственно в SQL для точного контроля над разделением каждой строки SQL.

Пример разделения сущностей:

for (i:=0;i<100;i++) new TheUser().put("databaseId", i).insert();

//SQL中的分库分表
db[2].exe(User.class, "insert into ", shardTB(tbID), shardDB(dbID)," (id, name, databaseId) values(?,?,?)", par(tbID, "u1", dbID), USE_BOTH);


Мультиарендность может быть реализована на основе IP-адреса или другого поля сущности. Для этого необходимо настроить экземпляр TenantGetter:

public static class CustomTenantGetter implements TenantGetter { @Override public ImprovedQueryRunner getTenant() { return DB.gctx(); //обычно это экземпляр DbContext, полученный из threadlocal: } } //запуск ctx = new DbContext(); ctx.setTenantGetter(new CustomTenantGetter());


**Встроенная декларативная транзакция, поддержка транзакций Spring**

jSqlBox имеет встроенный инструмент IOC/AOP и функцию декларативной транзакции. Если вы используете Spring, то можете легко настроить транзакцию, например:

DbContext ctx = new DbContext(ds); ctx.setConnectionManager(SpringTxConnectionManager.instance()); DbContext.setGlobalDbBoxContext(ctx);// 设定静态全局上下文


**Встроенная функция распределённой транзакции**

Принцип работы распределённых транзакций в jSqlBox похож на Seata. Он может автоматически генерировать откатные SQL-запросы, но исходный код jSqlBox проще, чем у Seata, поскольку jSqlBox генерирует откатные SQL на основе сущностного CRUD, что устраняет необходимость учитывать проблемы совместимости SQL.

**Избегание повторной разработки, отказ от антипаттернов**

jSqlBox не изобретает велосипед и использует DbUtils в качестве ядра. DbUtils — зрелый, лаконичный и эффективный JDBC-инструмент.

jSqlBox старается избегать антипаттернов. Антипаттерн — это когда тратится много времени на действия, которые не имеют смысла. В jSqlBox, например, не поддерживается конфигурация ассоциаций один-ко-многим и многие-к-одному. Это связано с тем, что такие ассоциации могут привести к проблемам с производительностью, обучением и обслуживанием, которые могут перевесить преимущества их использования.

Также в jSqlBox нет методов, заменяющих ключевые слова SQL. Такие методы считаются антипаттерном, так как они могут усложнить чтение и поддержку кода, а также сделать его менее эффективным по сравнению с использованием SQL напрямую.

**Пример начала работы**

Следующий пример демонстрирует базовую настройку и использование jSqlBox:

Добавьте зависимость в файл pom.xml:
com.github.drinkjava2 jsqlbox 5.0.14.jre8 com.h2database h2 1.3.176 ```

Введите следующий исходный код в IDE:

import javax.sql.DataSource;
import org.h2.jdbcx.JdbcConnectionPool;
import static com.github.drinkjava2.jsqlbox.DB.*;
import com.github.drinkjava2.jdialects.annotation.jdia.UUID25;
import com.github.drinkjava2.jdialects.annotation.jpa.Id;
import com.github.drinkjava2.jsqlbox.ActiveEntity;
import com.github.drinkjava2.jsqlbox.DB;
import com.github.drinkjava2.jsqlbox.DbContext;

public class HelloWorld implements ActiveEntity<HelloWorld> {
  @Id
  @UUID25
  private String id;
  private String name;
  public String getId() {return id;}

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

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

Введение

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

Обновления

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

Участники

все

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

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