jSqlBox5.0.4 выпущен, тщательно обработан и написан поддерживаемый SQL

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

1. Существует только один пакет jar размером 1M, и он не полагается на какие-либо сторонние библиотеки. Его можно использовать независимо, а также поддерживает использование в среде Spring.  
2. Ядро основано на DbUtils и совместимо с ним. В худшем случае его можно понизить и использовать как DbUtils, что позволяет быстро приступить к работе. 
3. Защита правописания SQL в java, исходный параметр встроенного метода записи SQL (подробно будет описано ниже).  
4. Поддержка под-базы данных и подтаблицы, мультитенантной, декларативной транзакции, распределенной транзакции, длинного текста, ActiveRecord.
5. Поддержка более 80 диалектов баз данных, разбиения на страницы, преобразования функций, генерации DDL, генерации исходного кода сущности, экспорта сущности или структуры базы данных в Excel.
6. Аннотации основных классов сущностей совместимы со стандартами JPA. 

Пишите SQL прямо на Java, и запись встроенного SQL с исходными параметрами является основной особенностью jSqlBox. В чем проблема традиционного написания SQL? Самая большая проблема заключается в том, что он "неподдерживаемый". Например, следующий SQL сложно добавить, обновить или удалить столбцы, потому что для поиска соответствующих позиций имен столбцов и параметров требуется много денег. Со временем, чем длиннее SQl, тем труднее его поддерживать:

insert into tb_price_setting (id,code,adult_price,child_price,total_price,adult_note,child_note,
currency,type,time_zone,status,include_tax,adult_discount,child_discount,total_discount,
created_at,updated_at,) values(1200, "BJD837434", 50, 30, 80, "15以上全价", "8-15半价", "USD, 8,
"UTC", "A", 3.03, 0, 0, 0, "2019-09-17 04:07:55", "2020-03-10 22:43:00";

После использования jSqlBox написание выглядит следующим образом:

DB.exe("insert into tb_price_setting (", //
	"id,", par(1200), //
	"code,", par("BJD837434"), //
	"adult_price,", par(50), //
	"child_price,", par(30), //
	"total_price,", par(80), //
	"adult_note,", par("15以上全价"), //
	"child_note,", par("8-15半价"), //
	"currency,", par("USD"), //
	"type,", par(8), //
	"time_zone,", par("UTC"), //
	"status,", par("A"), //
	"include_tax,", par(3.03), //
	"adult_discount,", par(0), //
	"child_discount,", par(0), //
	"total_discount,", par(0), //
	"created_at,", par("2019-09-17 04:07:55"), //
	"updated_at,", par("2020-03-10 22:43:00"), //
	")", valuesQuestions());

Параметры SQL в jSqlBox можно переместить в любую позицию. Такой способ записи значительно улучшает ремонтопригодность SQL без снижения читабельности SQL и поддержки собственных функций SQL. При добавлении или удалении столбцов Просто добавьте и удалите соответствующие строки. По сравнению с JPA, использующим ORM сущностей для CRUD, MyBatis использует шаблоны для написания SQL, jSqlBox - это самый простой и понятный способ написания, написания SQL напрямую и завершения работы, без необходимости вводить дополнительные классы сущностей и шаблоны. Проблема с шаблоном заключается в том, что его нужно записывать дважды, имя столбца записывается в шаблоне один раз и его нужно записывать снова при замене параметров, что увеличивает рабочую нагрузку по обслуживанию.

Внимательные студенты могут обнаружить, что этот тип строки имени столбца записывается непосредственно в SQL. Если поле базы данных изменяется, IDE не может обнаруживать и сообщать об ошибках. Другими словами, SQL не поддерживает реконструкцию. Как решить эту проблему? Беспокойство, это обновление предоставляет решение.

Решение 1. Используйте последний инструмент генерации Q от jSqlBox для автоматического создания Q-типов всех таблиц в соответствии с содержимым базы данных и настройки формата Q-типа. Каждый раз, когда база данных изменяется, просто восстанавливайте категорию Q. Класс Q содержит все константы полей таблицы. Вышеупомянутый SQL можно записать следующим образом:

QTbPriceSetting p=QTbPriceSetting.instance;
DB.exe("insert into ",p," (", //
	p.id, par(1200), //
	p.code, par("BJD837434"), //
	p.adult_price, par(50), //
	p.child_price, par(30), //
	p.total_price, par(80), //
	p.adult_note, par("15以上全价"), //
	p.child_note, par("8-15半价"), //
	p.currency, par("USD"), //
	p.type, par(8), //
	p.time_zone, par("UTC"), //
	p.status, par("A"), //
	p.include_tax, par(3.03), //
	p.adult_discount, par(0), //
	p.child_discount, par(0), //
	p.total_discount, par(0), //
	p.created_at, par("2019-09-17 04:07:55"), //
	p.updated_at, par("2020-03-10 22:43:00"), //
	")", valuesQuestions());

Решение 2. Используйте подключаемый модуль Maven QueryDSL, который подходит для ситуаций, когда классы сущностей JPA уже существуют. Этот плагин может сканировать существующие классы сущностей JPA проекта для создания классов Q, а jSqlBox может использовать свои классы Q для объединения собственного SQL. Ниже приведен пример использования, который аналогичен использованию схемы 1. Когда требуется имя таблицы, экземпляр Q передается напрямую, а когда требуется имя столбца SQL, можно передать поле констант класса Q:

QUser u = QUser.user;
DB.exe("insert into ", u, " (",  u.id, ",", par(1),  u.userName, ",", par("张三"),  u.userAge, par(15),  ")", valuesQuestions());

Пожалуйста, обратитесь к разделу «Рефакторинг, поддерживаемый SQL» в руководстве пользователя jSqlBox для подробного ознакомления с двумя вышеуказанными схемами.

jSqlBox (версия 5.0.4.jre8) Содержание этого обновления:
1. Как упоминалось выше, вновь сгенерированный и используемый класс Q для написания SQL, поддерживающего реконструкцию. Чтобы сгенерировать класс Q в соответствии с базой данных, вам нужно только вызвать следующий метод в jSqlBox:   
      TableModelUtils.db2QClassSrcFiles (ctx.getDataSource (), ctx.getDialect (), «c: \\ outputFolder», «com.demo», «Q») ;
2. Добавлены новые функции арендатора. Подробности см. Во введении в руководстве пользователя "jSqlBox advanced-master-slave, sub-database sub-table, multi-tenant".
3. TableModelUtilsOfDB добавляет метод compareDB, который представляет собой небольшую функцию, которую можно использовать для сравнения, отличаются ли две структуры базы данных. Использование следующее:
   TableModelUtilsOfDb.compareDbIgnoreLength (connection1, connection2);
4. Можно использовать новый параметр конфигурации SqlItemhandler для DbContext. Настройте свой собственный синтаксический анализатор записей Sql.
5. Новый метод qryBooleanValue в классе DbPro возвращает логическое значение.
6. К классу DB добавляются два новых метода notBlank и noBlank, которые используются для определения условия пустой строки при динамическом соединении SQL, что аналогично исходным методам использования notNull и noNull. Например, следует
использовать следующий метод записи user.getAge Когда () имеет значение NULL, столбец возраста вставляться не будет.

DB.exe("insert into users (", //
           " name ,", par("Sam"), //
            notNull("age,", user.getAge()), //
            notBlank("email,", user.getEmail()), //
            " address ", par("Canada"), //
            ") ", valuesQuestions()); 

Метод when () в БД также можно использовать для динамического объединения SQL на основе условий, но метод notBlank / noBlank / notNull / noNull более краток для написания. 

рекомендация

отwww.oschina.net/news/126460/jsqlbox-5-0-4-released
рекомендация