Империя Apache-db
![]() | Тема этой статьи может не соответствовать рекомендациям Википедии по известности продуктов и услуг . ( март 2022 г. ) |
![]() | |
Разработчик(и) | Фонд программного обеспечения Apache |
---|---|
Стабильная версия | 3.0.0
/ 11 марта 2022 г |
Репозиторий | Репозиторий EmpireDB |
Написано в | Ява |
Операционная система | Кросс-платформенный |
Тип | Структура сохранения |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | империя-БД |
Apache Empire-db — это библиотека Java, предоставляющая объектно-ориентированный API высокого уровня для доступа к системам управления реляционными базами данных (СУРБД) через JDBC . Apache Empire-db имеет открытый исходный код и предоставляется по лицензии Apache License 2.0 от Apache Software Foundation .
По сравнению с объектно-реляционным сопоставлением (ORM) или другими решениями для сохранения данных, такими как Hibernate , iBATIS или TopLink Empire-db не использует XML-файлы или аннотации Java для обеспечения сопоставления простых (старых) объектов Java ( POJO ) с базой данных. таблицы, представления и столбцы. Вместо этого Empire-db использует объектную модель Java для описания базовой модели данных и API, который работает почти исключительно со ссылками на объекты, а не со строковыми литералами .
Целью Empire-db является обеспечение лучшего качества программного обеспечения и улучшенной удобства сопровождения за счет повышения безопасности во время компиляции и уменьшения избыточности метаданных. Кроме того, приложения могут выиграть от более высокой производительности благодаря полному контролю над операторами SQL и их выполнением со стороны разработчика по сравнению с большинством решений для сопоставления OR. [1]
Основные преимущества
[ редактировать ]Ключевым преимуществом Empire-db является его API для динамической генерации SQL для произвольных операторов выбора, обновления, вставки или удаления исключительно с использованием методов Java, которые ссылаются на объекты модели. Это обеспечивает безопасность типов и почти полностью исключает использование строковых литералов для имен или выражений в коде. Кроме того, независимость СУБД достигается за счет подключаемой модели драйверов.
Использование ссылок на объекты таблиц и столбцов значительно повышает безопасность во время компиляции и, таким образом, сокращает объем тестирования. Положительным побочным эффектом является возможность использования автодополнения кода IDE для просмотра модели данных, что повышает производительность и устраняет необходимость в других внешних инструментах или плагинах IDE.
Кроме того, объектная модель также обеспечивает безопасный и простой доступ к метаинформации модели данных, такой как тип данных поля, максимальная длина поля, является ли поле обязательным и ограниченный выбор вариантов значений поля. Метаданные могут расширяться пользователем и не ограничиваются метаданными, связанными с СУБД. Доступность метаинформации способствует созданию более общего кода и устраняет избыточность на всех уровнях приложения.
Особенности с первого взгляда
[ редактировать ]- Определение модели данных с помощью объектной модели Java исключает необходимость изучения XML-схем или аннотаций и позволяет легко перехватывать и расширять данные пользователя.
- Независимая обработка записей и определение команд портативной СУБД с поддержкой различных реляционных баз данных, таких как Oracle , Microsoft SQL Server , MySQL , Derby , H2 и HSQLDB (начиная с версии 2.0.5).
- Генерация DDL для целевой СУБД из определения объекта либо для всей базы данных, либо для отдельных объектов, таких как таблицы, представления, столбцы и отношения.
- Типобезопасный API для динамического создания команд SQL позволяет динамически создавать инструкции SQL, используя только методы API и ссылки на объекты вместо строковых литералов. Это обеспечивает высокую степень типовой безопасности, что упрощает тестирование и обслуживание.
- Уменьшенный объем кода Java и мощный перехват доступа к полям и метаданным через динамические компоненты в качестве альтернативы POJO. Это даже позволяет изменять модель данных (DDL) во время выполнения.
- Автоматическое отслеживание состояния записи и модификации полей (так называемая «грязная проверка») для вставки/обновления только измененных полей.
- Поддержка оптимистической блокировки через столбец метки времени.
- Нет необходимости всегда работать с полными объектами базы данных. Создавайте запросы для предоставления данных именно так, как необходимо, и получайте результат, например, в виде списка POJO любого типа с соответствующими методами установки свойств или конструктором.
- Легкая и пассивная библиотека с нулевой конфигурацией, обеспечивающая простую интеграцию с любой архитектурой или платформой.
Пример
[ редактировать ]В качестве примера рассмотрим базу данных с двумя таблицами «Сотрудники» и «Отделы» , для которой должен быть получен список сотрудников в определенном формате, с определенными ограничениями и заданным порядком.
Предполагается, что соответствующий оператор SQL синтаксиса Oracle будет следующим:
SELECT t1.EMPLOYEE_ID,
t1.LASTNAME || ', ' || t1.FIRSTNAME AS NAME,
t2.DEPARTMENT
FROM (EMPLOYEES t1
INNER JOIN DEPARTMENTS t2 ON t1.DEPARTMENT_ID = t2.DEPARTMENT_ID)
WHERE upper(t1.LASTNAME) LIKE upper('Foo%')
AND t1.RETIRED=0
ORDER BY t1.LASTNAME, t1.FIRSTNAME
Этот оператор SQL можно создать с помощью командного API Empire-db, используя такие ссылки на объектную модель:
SampleDB db = getDatabase();
// Declare shortcuts (not necessary but convenient)
SampleDB.Employees EMP = db.EMPLOYEES;
SampleDB.Departments DEP = db.DEPARTMENTS;
// Create a command object
DBCommand cmd = db.createCommand();
// Select columns
cmd.select(EMP.EMPLOYEE_ID);
cmd.select(EMP.LASTNAME.append(", ").append(EMP.FIRSTNAME).as("NAME"));
cmd.select(DEP.DEPARTMENT);
// Join tables
cmd.join (EMP.DEPARTMENT_ID, DEP.DEPARTMENT_ID);
// Set constraints
cmd.where(EMP.LASTNAME.likeUpper("Foo%"));
cmd.where(EMP.RETIRED.is(false));
// Set order
cmd.orderBy(EMP.LASTNAME);
cmd.orderBy(EMP.FIRSTNAME);
Чтобы выполнить запрос и получить список POJO, содержащих результат запроса, можно использовать следующий код:
// Class definition for target objects
public class EmployeeInfo {
private int employeeId;
private String name;
private String department;
// Getter's and Setters for all properties
// or a public Constructor using fields
public get...
public set...
}
// Retrieve employee list using the cmd object created above
DBReader reader = new DBReader();
try {
reader.open(cmd, getConnection());
List<EmployeeInfo> empList = reader.getBeanList(EmployeeInfo.class);
} finally {
reader.close()
}
Empire-db также поддерживает доступ к полям через ссылки на объекты или получение результатов запроса в формате XML.
История
[ редактировать ]Empire-db изначально был разработан в ESTEAM Software, немецкой компании по разработке программного обеспечения, которая использовала Empire-db для разработки различных приложений для различных отраслей.
В январе 2008 года Empire-db стал официально открытым исходным кодом и впервые опубликован на SourceForge.net.
В июне 2008 года в Apache Software Foundation было подано предложение превратить Empire-db в проект инкубатора Apache. В июле 2008 года Empire-db была принята на инкубацию, и все права на Программное обеспечение были переданы Apache Foundation.
В октябре 2008 года Empire-db 2.0.4 стала первой официальной версией инкубатора Apache, в которой все имена пакетов были изменены и теперь начинались с org.apache.empire.
См. также
[ редактировать ]- Подключение к базе данных Java (JDBC)
- Объектно-реляционное отображение
- Спящий режим
- иБАТИС
- ТопЛинк
- Апач Стратс
Ссылки
[ редактировать ]- ^ «Империя Apache-db» . Empire-db.apache.org . Проверено 21 марта 2022 г.