Рексдб: открытый фреймворк для работы с данными
Рексдб — это открытый фреймворк, написанный на Java. Он предоставляет функции для работы с базами данных, такие как запросы, обновления, пакетная обработка, вызовы и транзакции. Рексдб может заменить Mybatis и Hibernate в качестве основного ORM-фреймворка системы.
Основные характеристики:
Функции:
Техническая поддержка:
Хотя рексдб обновляется медленно, каждая выпущенная версия была успешно протестирована в различных производственных средах, включая корпоративные, правительственные и финансовые системы. Это обеспечивает стабильность продукта. Однако, поскольку рексдб является бесплатным программным обеспечением с открытым исходным кодом, кроме документации, исходного кода и примеров, он не предоставляет ежедневную техническую поддержку.
Рексдб использует лицензию Apache 2.0, что позволяет использовать его бесплатно для личных или коммерческих целей.
Для получения дополнительной информации о рексдб посетите официальный сайт проекта.
Примечание: в тексте запроса присутствуют фрагменты кода, которые были переведены без изменений. DB.getMapList
*Пример 3:* Выполнение SQL с предкомпилированными параметрами, когда параметр parameter имеет тип *java.util.Map* или *Java-объект*, в SQL используется маркер предкомпиляции `#{}`.
```
// map — экземпляр типа java.util.Map, содержит ключ с именем «class»;
// obj — обычный Java-объект, содержит член класса с именем «clazz»
List<RMap> list = DB.getMapList("select * from t_student where class=#{clazz}", map);
List<RMap> list = DB.getMapList("select * from t_student where class=#{clazz}", obj);
```
*Пример 4:* Выполнение постраничного запроса, запрос записей с 100 по 110.
```
List<RMap> list = DB.getMapList("select * from t_student where class='3年1班'", 100, 10);
```
*Пример 5:* Выполнение SQL в указанном источнике данных.
В конфигурационном файле *rexdb.xml* есть источник данных с идентификатором *student*.
```
List<RMap> list = DB.getMapList("student", "select * from t_student where class='3年1班'");
```
DB.update()
Используется для выполнения операций вставки, обновления и удаления. Метод возвращает количество затронутых строк. Формат:
> **int DB.update([String dataSourceId,] String sql [, Object[] | Ps | Map | Object parameter])**
*Пример 1:* Выполнение SQL.
```
DB.update("delete from t_student where num = 1");
```
*Пример 2:* Выполнение SQL с предкомпилированными параметрами, когда параметр parameter имеет тип *Object-массив* или *org.rex.db.Ps*. В SQL используется маркер предкомпиляции `?`.
```
string sql = "insert into t_student(num, student_name, student_class,create_time) values (?, ?, ?, ?)";
DB.update(sql, new Object[]{1, "钟小强","3年1班", new Date()});
DB.update(sql, new Ps(2, "王小五", "3年1班",new Date()));
```
*Пример 3:* Выполнение SQL с предкомпилированными параметрами, когда параметр parameter имеет тип *java.util.Map* или *Java-объект*. В SQL используется маркер предкомпиляции `#{}`.
```
String sql = "update t_student set student_name = #{studentName} where num = #{num}";
DB.update(sql,map);// map — экземпляр типа java.util.Map, содержит ключи с именами «studentName» и «num»
DB.update(sql,new Students(1, "钟小强", null, null));//obj — обычный Java-объект, содержит члены класса с именами «studentName» и «num».
```
*Пример 4:* Выполнение SQL в указанном источнике данных.
В конфигурационном файле *rexdb.xml* есть источник данных с идентификатором *student*.
```
List<RMap> list = DB.getMapList("student", "delete from t_student where num = 1");
```
DB.batchUpdate()
Метод используется для выполнения пакетных операций. Он может повысить производительность при выполнении большого количества изменений данных. Формат:
> **int[] DB.batchUpdate([String datasource,] String[] sqls)**
> **int[] DB.batchUpdate([String datasource,] String sql, Object[][] | Ps[] | Map[] | Object[] | List parameter )**
*Пример 1:* Выполнение нескольких SQL.
```
String[] sqls = new String[]{"delete from t_student where num=1", "delete from t_student where num=2"};
DB.batchUpdate(sqls);
```
*Пример 2:* Выполнение SQL с предкомпилированными параметрами, когда элемент параметра parameter имеет тип *Object-массив* или *org.rex.db.Ps*. В SQL используется маркер предкомпиляции `?`.
```
string sql = "insert into t_student(num, student_name, student_class,create_time) values (?, ?, ?, ?)";
DB.batchUpdate(sql, new Object[][]{{1, "钟小强","3年1班", new Date()}, {2, "王小五","3年1班", new Date()}});
DB.batchUpdate(sql, new Ps[]{new Ps(3, "李小华", "3年1班", new Date()), new Ps(4, "赵小明", "3年1班", new Date())});
```
*Пример 3:* Выполнение SQL с предкомпилированными параметрами, когда элемент параметра parameter имеет тип *java.util.Map* или *Java-объект*. В SQL используется маркер предкомпиляции `#{}`.
```
String sql = "update t_student set student_name = #{studentName} where num = #{num}";
DB.batchUpdate(sql, maps);//maps — массив экземпляров типа java.util.Map. Каждый элемент массива содержит ключи с именами «studentName» и «num».
DB.batchUpdate(sql, objs);//objs — массив объектов типа Student. Объект Student содержит члены класса с именами «studentName» и «num».
```
*Пример 4:* Выполнение SQL в указанном источнике данных.
В конфигурационном файле *rexdb.xml* есть источник данных с идентификатором *student*.
```
String[] sqls = new String[]{"delete from t_student where num=1", "delete from t_student where num=2"};
DB.batchUpdate("student", sqls);
```
Транзакции
Rexdb использует программный подход к обработке транзакций. Следующие методы используются для обработки транзакций:
> **void DB.beginTransaction([String dataSourceId] [,DefaultDefinition definition])** // начать транзакцию
> **void DB.commit([String dataSourceId])** // зафиксировать транзакцию
> **void DB.rollback([String dataSourceId])** // откатить транзакцию
JTA-транзакции используют следующие методы:
> **void DB.beginJta([DefaultDefinition definition])** // начать JTA-транзакцию
> **void DB.commitJta()** // зафиксировать JTA-транзакцию
> **void DB.rollbackJta()** // откатить JTA-транзакцию
Пример:
```
DB.beginTransaction();
try{
DB.update("delete from t_student where num = 1");
DB.update("delete from t_student where num = 2");
UserDao.update();//Rexdb-транзакция является потоковой, поэтому она разделяется на несколько DAO в одном потоке и в одном источнике данных
DB.commit();
}catch(Exception e){
DB.rollback();
}
```
Вызов DB.call()
Этот метод используется для выполнения вызовов. Его можно использовать для вызова хранимых процедур и функций. Поддерживает входные, выходные параметры и возвращаемые значения. Формат:
> **RMap DB.call([String dataSourceId,] String sql [, Object[] | Ps | Map | Object parameter])**
*Пример 1:* Вызов хранимой процедуры/функции.
```
DB.call("test_proc()");
```
*Пример 2:* Вызов хранимой процедуры/функции с входным параметром.
```
DB.call("{call test_proc_in(?)}", new Ps(200));
```
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )