Компонент предоставляет 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 )