sql2java — лёгкий и давно существующий инструмент Java ORM
sql2java – это лёгкий инструмент Java ORM с долгой историей.
К сожалению, он больше не поддерживается, последняя версия — sql2java-2-6-7.zip.
С 2010 года я постоянно использую этот инструмент для генерации кода доступа к базе данных. Он небольшой по размеру, но имеет хорошую структуру, поддерживает множество основных баз данных, удобен в использовании для создания кода и позволяет свободно настраивать создаваемый код. Кроме того, он очень стабилен.
Однако год назад я обнаружил, что инструмент не может поддерживать BLOB, а поддержка CLOB оставляет желать лучшего. В то время я обошёл эту проблему. Теперь, когда проект требует использования типа BLOB, я решил решить эту проблему.
На официальном сайте sql2java есть исходный код, но поскольку в SVN-репозитории нет тегов, невозможно отследить исходный код версии 2.6.7. Поэтому я использовал CFR-декомпилятор для декомпиляции ядра библиотеки sql2java.jar и получил исходный код.
Изучив декомпилированный исходный код, я нашёл причину, по которой sql2java не поддерживает BLOB, и на этой основе сделал несколько изменений, чтобы обеспечить поддержку BLOB и CLOB.
Исправление затрагивает только два файла:
Интерфейс sql2java остался без изменений.
Поскольку были внесены изменения только в файл шаблона java5/perschema/manager.java.vm, эта версия гарантирует корректность кода только при использовании sql2java.properties
с параметром template.folder.include
, установленным в значение java5
, а не java
.
Для удобства использования и сокрытия деталей доступа к базе данных объекты Blob в сгенерированных классах Java Bean преобразуются в byte[], а объекты Clob — в java.lang.String.
Пример кода:
/**
* Getter method for colorImage.
* <br>
* Meta Data Information (in progress):
* <ul>
* <li>full name: TEST_USER.COLOR_IMAGE</li>
* <li>column size: 4000</li>
* <li>jdbc type returned by the driver: Types.CLOB</li>
* </ul>
*
* @return the value of colorImage
*/
public String getColorImage()
{
return colorImage;
}
/**
* Setter method for colorImage.
* <br>
* The new value is set only if compareTo() says it is different,
* or if one of either the new value or the current value is null.
* In case the new value is different, it is set and the field is marked as 'modified'.
*
* @param newVal the new value to be assigned to colorImage
*/
public void setColorImage(String newVal)
{
if ((newVal != null && colorImage != null && (newVal.compareTo(colorImage) == 0)) ||
(newVal == null && colorImage == null && colorImageIsInitialized)) {
return;
}
colorImage = newVal;
colorImageIsModified = true;
colorImageIsInitialized = true;
}
/**
* Getter method for grayImage.
* <br>
* Meta Data Information (in progress):
* <ul>
* <li>full name: TEST_USER.GRAY_IMAGE</li>
* <li>column size: 4000</li>
* <li>jdbc type returned by the driver: Types.BLOB</li>
* </ul>
*
* @return the value of grayImage
*/
public byte[] getGrayImage()
{
return grayImage;
}
/**
* Setter method for grayImage.
* <br>
* Attention, there will be no comparison with current value which
* means calling this method will mark the field as 'modified' in all cases.
*
* @param newVal the new value to be assigned to grayImage
*/
public void setGrayImage(byte[] newVal)
{
if ((newVal != null && grayImage != null && newVal.equals(grayImage)) ||
(newVal == null && grayImage == null && grayImageIsInitialized)) {
return;
}
grayImage = newVal;
grayImageIsModified = true;
grayImageIsInitialized = true;
}
GuYaDong 10km0811@sohu.com
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )