From b5b2baefe180f6d845a889b7cfcfa608cae593d6 Mon Sep 17 00:00:00 2001 From: liaozan <378024053@qq.com> Date: Fri, 8 Dec 2023 19:39:47 +0800 Subject: [PATCH] Update starrocks --- .../starrocks/StarrocksAutoConfiguration.java | 17 +++++++ .../starrocks/operation/StarrocksService.java | 15 +++---- .../operation/StarrocksServiceImpl.java | 44 +++++++++---------- .../schbrain/framework/dao/util/SQLUtil.java | 22 ++++++---- 4 files changed, 57 insertions(+), 41 deletions(-) diff --git a/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/StarrocksAutoConfiguration.java b/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/StarrocksAutoConfiguration.java index 495d9ca..cfffdde 100644 --- a/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/StarrocksAutoConfiguration.java +++ b/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/StarrocksAutoConfiguration.java @@ -1,8 +1,14 @@ package com.schbrain.framework.autoconfigure.starrocks; import com.schbrain.framework.autoconfigure.starrocks.properties.StarrocksProperties; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +import static com.schbrain.framework.autoconfigure.starrocks.constants.StarrocksConstants.JDBC_URL_TEMPLATE; /** * @author liaozan @@ -12,4 +18,15 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties @EnableConfigurationProperties(StarrocksProperties.class) public class StarrocksAutoConfiguration { + @Bean("starrocksJdbcTemplate") + public NamedParameterJdbcTemplate starrocksJdbcTemplate(StarrocksProperties config) { + HikariConfig hikariConfig = new HikariConfig(); + hikariConfig.setPoolName(config.getDatabase()); + hikariConfig.setDriverClassName(config.getDriverClassName()); + hikariConfig.setJdbcUrl(String.format(JDBC_URL_TEMPLATE, config.getHost(), config.getPort(), config.getDatabase())); + hikariConfig.setUsername(config.getUsername()); + hikariConfig.setPassword(config.getPassword()); + return new NamedParameterJdbcTemplate(new HikariDataSource(hikariConfig)); + } + } diff --git a/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/operation/StarrocksService.java b/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/operation/StarrocksService.java index 6458510..959b17d 100644 --- a/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/operation/StarrocksService.java +++ b/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/operation/StarrocksService.java @@ -1,8 +1,7 @@ package com.schbrain.framework.autoconfigure.starrocks.operation; -import org.springframework.jdbc.core.PreparedStatementCreator; - import java.util.List; +import java.util.Map; /** * @author liaozan @@ -16,17 +15,17 @@ public interface StarrocksService { void upsert(T entity); /** - * 单个保存/更新,传入 columns 只会处理响应的 column + * 批量保存/更新 */ - void upsert(T entity, List columns); + void upsertBatch(List entityList); /** - * 批量保存/更新 + * 单个保存/更新,传入 columns 只会处理相应的 columns */ - void upsertBatch(List entityList); + void upsert(T entity, List columns); /** - * 批量保存/更新,传入 columns 只会处理响应的 column + * 批量保存/更新,传入 columns 只会处理相应的 columns */ void upsertBatch(List entityList, List columns); @@ -43,6 +42,6 @@ public interface StarrocksService { /** * 根据 sql 查询 */ - List search(PreparedStatementCreator creator); + List search(String sql, Map params); } diff --git a/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/operation/StarrocksServiceImpl.java b/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/operation/StarrocksServiceImpl.java index 4e93735..b84bd07 100644 --- a/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/operation/StarrocksServiceImpl.java +++ b/starters/starrocks-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/starrocks/operation/StarrocksServiceImpl.java @@ -3,18 +3,16 @@ package com.schbrain.framework.autoconfigure.starrocks.operation; import com.schbrain.common.util.ValidateUtils; import com.schbrain.framework.autoconfigure.starrocks.annotation.StarrocksTable; import com.schbrain.framework.autoconfigure.starrocks.properties.StarrocksProperties; -import com.zaxxer.hikari.HikariConfig; -import com.zaxxer.hikari.HikariDataSource; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.ResolvableType; -import org.springframework.jdbc.core.*; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.namedparam.*; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; -import static com.schbrain.framework.autoconfigure.starrocks.constants.StarrocksConstants.JDBC_URL_TEMPLATE; import static com.schbrain.framework.autoconfigure.starrocks.constants.StarrocksConstants.STREAM_LOAD_TEMPLATE; /** @@ -28,8 +26,10 @@ public class StarrocksServiceImpl implements StarrocksService, Initializin @Autowired protected StarrocksProperties config; + @Autowired + @Qualifier("starrocksJdbcTemplate") + protected NamedParameterJdbcTemplate jdbcTemplate; - protected JdbcTemplate jdbcTemplate; protected StarrocksStreamLoadHandler handler; @SuppressWarnings({"unchecked", "DataFlowIssue"}) @@ -44,13 +44,13 @@ public class StarrocksServiceImpl implements StarrocksService, Initializin } @Override - public void upsert(T entity, List columns) { - upsertBatch(List.of(ValidateUtils.notNull(entity, "entity不能为空")), columns); + public void upsertBatch(List entityList) { + upsertBatch(entityList, Collections.emptyList()); } @Override - public void upsertBatch(List entityList) { - upsertBatch(entityList, Collections.emptyList()); + public void upsert(T entity, List columns) { + upsertBatch(List.of(ValidateUtils.notNull(entity, "entity不能为空")), columns); } @Override @@ -69,15 +69,21 @@ public class StarrocksServiceImpl implements StarrocksService, Initializin } @Override - public List search(PreparedStatementCreator callback) { - return jdbcTemplate.queryForStream(callback, rowMapper).collect(Collectors.toList()); + public List search(String sql, Map params) { + SqlParameterSource parameterSource; + if (params.isEmpty()) { + parameterSource = EmptySqlParameterSource.INSTANCE; + } else { + parameterSource = new MapSqlParameterSource(params); + } + // noinspection SqlSourceToSinkFlow 关掉idea sql注入检查 + return jdbcTemplate.queryForStream(sql, parameterSource, rowMapper).collect(Collectors.toList()); } @Override public void afterPropertiesSet() { StarrocksTable annotation = ValidateUtils.notNull(entityClass.getAnnotation(StarrocksTable.class), StarrocksTable.class.getName() + "不能为空"); this.handler = createHandler(annotation.value()); - this.jdbcTemplate = createJdbcTemplate(annotation.value()); } protected StarrocksStreamLoadHandler createHandler(String tableName) { @@ -85,14 +91,4 @@ public class StarrocksServiceImpl implements StarrocksService, Initializin return new StarrocksStreamLoadHandler(streamLoadUrl, config.getUsername(), config.getPassword()); } - protected JdbcTemplate createJdbcTemplate(String tableName) { - HikariConfig hikariConfig = new HikariConfig(); - hikariConfig.setPoolName(String.format("%s:%s", config.getDatabase(), tableName)); - hikariConfig.setDriverClassName(config.getDriverClassName()); - hikariConfig.setJdbcUrl(String.format(JDBC_URL_TEMPLATE, config.getHost(), config.getPort(), config.getDatabase())); - hikariConfig.setUsername(config.getUsername()); - hikariConfig.setPassword(config.getPassword()); - return new JdbcTemplate(new HikariDataSource(hikariConfig)); - } - } diff --git a/support/schbrain-base-dao/src/main/java/com/schbrain/framework/dao/util/SQLUtil.java b/support/schbrain-base-dao/src/main/java/com/schbrain/framework/dao/util/SQLUtil.java index 3d034a9..6386c8b 100644 --- a/support/schbrain-base-dao/src/main/java/com/schbrain/framework/dao/util/SQLUtil.java +++ b/support/schbrain-base-dao/src/main/java/com/schbrain/framework/dao/util/SQLUtil.java @@ -3,7 +3,6 @@ package com.schbrain.framework.dao.util; import com.schbrain.common.util.StreamUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.util.ClassUtils; import java.util.*; @@ -14,28 +13,33 @@ import java.util.*; */ public class SQLUtil { + private static final Set> NUMBER_TYPES = Set.of(Integer.class, Long.class, Short.class, Byte.class, Double.class, Float.class); + public static String buildInClause(String columnName, Class valueType, List values) { Set valueList = StreamUtils.filterToSet(values, Objects::nonNull); if (CollectionUtils.isEmpty(valueList)) { throw new IllegalArgumentException("Value list can not be empty."); } - StringBuilder builder = new StringBuilder(" "); - builder.append(columnName).append(" in ("); - if (ClassUtils.isPrimitiveWrapper(valueType)) { - builder.append(StreamUtils.join(valueList)).append(")"); + StringBuilder builder = new StringBuilder(columnName).append(" in ("); + if (isNumberType(valueType)) { + builder.append(StreamUtils.join(valueList)); } else { - builder.append(StreamUtils.join(valueList, SQLUtil::escapeSql)).append(")"); + builder.append(StreamUtils.join(valueList, SQLUtil::escapeSql)); } - builder.append(" "); - return builder.toString(); + builder.append(")"); + return StringUtils.wrap(builder.toString(), " "); } private static String escapeSql(Object value) { if (value instanceof String) { - return StringUtils.replace((String) value, "'", "''"); + return StringUtils.wrap((String) value, "'"); } else { return String.valueOf(value); } } + private static boolean isNumberType(Class valueType) { + return NUMBER_TYPES.contains(valueType); + } + } -- GitLab