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

OSCHINA-MIRROR/selfly-sonsure-dumper

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
native-sql.md 3.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:43 e04b5c0

Выполнение пользовательского SQL

Компонент предоставляет NativeExecutor для выполнения пользовательского SQL.

int count = jdbcDao.nativeExecutor()
        .command("update `com.sonsure.dumper.test.model.UserInfo` set loginName = ? where userInfoId = ?")
        .parameters(new Object[]{"newName", 39L})
        .update();

В SQL имена таблиц и столбцов соответствуют именам классов и атрибутов сущностей, происходит автоматическое преобразование.

Можно заметить, что здесь мы использовали полное имя сущности com.sonsure.dumper.test.model.UserInfo, потому что компонент в режиме native не знает о соответствующих сущностях, поэтому используется полное имя.

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

<bean id="mappingHandler" class="com.sonsure.dumper.core.mapping.DefaultMappingHandler">
    <constructor-arg name="modelPackages" value="com.sonsure.dumper.test.model.**"/>
</bean>

<bean id="jdbcTemplateEngine" class="com.sonsure.dumper.springjdbc.config.JdbcTemplateEngineFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingHandler" ref="mappingHandler"/>
</bean>

<bean id="jdbcDao" class="com.sonsure.dumper.springjdbc.persist.SpringJdbcDaoTemplateImpl">
    <property name="jdbcEngine" ref="jdbcTemplateEngine"/>
</bean>

Таким образом, мы можем использовать короткие имена для выполнения SQL:

int count = jdbcDao.nativeExecutor()
        .command("update UserInfo set loginName = ? where userInfoId = ?")
        .parameters(new Object[]{"newName", 39L})
        .update();

Совет: Если пакет сканирования не указан, но сущность использовалась ранее с помощью другого класса, короткое имя также будет работать успешно.

Если вы хотите выполнить 100% нативный SQL без анализа и преобразования, вы можете указать nativeCommand:

int count = jdbcDao.nativeExecutor()
        .command("update user_info set login_name = ? where user_info_id = ?")
        .parameters(new Object[]{"newName", 39L})
        .nativeCommand() //без обработки преобразования
        .update();

Примечание: После указания nativeCommand() обработка преобразования не выполняется, и динамическая обработка имён таблиц при горизонтальном секционировании невозможна.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/selfly-sonsure-dumper.git
git@api.gitlife.ru:oschina-mirror/selfly-sonsure-dumper.git
oschina-mirror
selfly-sonsure-dumper
selfly-sonsure-dumper
master