diff --git a/CHANGELOG.md b/CHANGELOG.md index d3eedc509..6afff4a3c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 6.0.0-M10 (2023-12-23) +# 6.0.0-M10 (2023-12-28) ### 计划实现 * 【poi 】 Markdown相关(如HTML转换等),基于commonmark-java diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/H2Dialect.java b/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/H2Dialect.java index 8817ad247..9e555114a 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/H2Dialect.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/H2Dialect.java @@ -12,8 +12,8 @@ package org.dromara.hutool.db.dialect.impl; -import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.array.ArrayUtil; +import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.db.Entity; import org.dromara.hutool.db.Page; @@ -23,7 +23,6 @@ import org.dromara.hutool.db.sql.SqlBuilder; import java.sql.Connection; import java.sql.PreparedStatement; -import java.sql.SQLException; /** * H2数据库方言 @@ -33,6 +32,9 @@ import java.sql.SQLException; public class H2Dialect extends AnsiSqlDialect { private static final long serialVersionUID = 1490520247974768214L; + /** + * 构造 + */ public H2Dialect() { // wrapper = new Wrapper('"'); } @@ -49,7 +51,7 @@ public class H2Dialect extends AnsiSqlDialect { } @Override - public PreparedStatement psForUpsert(final Connection conn, final Entity entity, final String... keys) throws SQLException { + public PreparedStatement psForUpsert(final Connection conn, final Entity entity, String... keys) { Assert.notEmpty(keys, "Keys must be not empty for H2 MERGE SQL."); SqlBuilder.validateEntity(entity); final SqlBuilder builder = SqlBuilder.of(quoteWrapper); @@ -58,7 +60,7 @@ public class H2Dialect extends AnsiSqlDialect { final StringBuilder placeHolder = new StringBuilder(); // 构建字段部分和参数占位符部分 - entity.forEach((field, value)->{ + entity.forEach((field, value) -> { if (StrUtil.isNotBlank(field)) { if (fieldsPart.length() > 0) { // 非第一个参数,追加逗号 @@ -75,14 +77,15 @@ public class H2Dialect extends AnsiSqlDialect { String tableName = entity.getTableName(); if (null != this.quoteWrapper) { tableName = this.quoteWrapper.wrap(tableName); + keys = quoteWrapper.wrap(keys); } builder.append("MERGE INTO ").append(tableName) - // 字段列表 - .append(" (").append(fieldsPart) - // 更新关键字列表 - .append(") KEY(").append(ArrayUtil.join(keys, ", ")) - // 更新值列表 - .append(") VALUES (").append(placeHolder).append(")"); + // 字段列表 + .append(" (").append(fieldsPart) + // 更新关键字列表 + .append(") KEY(").append(ArrayUtil.join(keys, ", ")) + // 更新值列表 + .append(") VALUES (").append(placeHolder).append(")"); return StatementUtil.prepareStatement(conn, builder); } diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/MysqlDialect.java b/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/MysqlDialect.java index 998253c94..fd56e0f06 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/MysqlDialect.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/MysqlDialect.java @@ -17,21 +17,23 @@ import org.dromara.hutool.db.Entity; import org.dromara.hutool.db.Page; import org.dromara.hutool.db.StatementUtil; import org.dromara.hutool.db.dialect.DialectName; -import org.dromara.hutool.db.sql.SqlBuilder; import org.dromara.hutool.db.sql.QuoteWrapper; +import org.dromara.hutool.db.sql.SqlBuilder; import java.sql.Connection; import java.sql.PreparedStatement; -import java.sql.SQLException; /** * MySQL方言 - * @author loolly * + * @author loolly */ -public class MysqlDialect extends AnsiSqlDialect{ +public class MysqlDialect extends AnsiSqlDialect { private static final long serialVersionUID = -3734718212043823636L; + /** + * 构造 + */ public MysqlDialect() { quoteWrapper = new QuoteWrapper('`'); } @@ -57,11 +59,10 @@ public class MysqlDialect extends AnsiSqlDialect{ * @param entity 数据实体类(包含表名) * @param keys 此参数无效 * @return PreparedStatement - * @throws SQLException SQL执行异常 * @since 5.7.20 */ @Override - public PreparedStatement psForUpsert(final Connection conn, final Entity entity, final String... keys) throws SQLException { + public PreparedStatement psForUpsert(final Connection conn, final Entity entity, final String... keys) { SqlBuilder.validateEntity(entity); final SqlBuilder builder = SqlBuilder.of(quoteWrapper); @@ -70,7 +71,7 @@ public class MysqlDialect extends AnsiSqlDialect{ final StringBuilder updateHolder = new StringBuilder(); // 构建字段部分和参数占位符部分 - entity.forEach((field, value)->{ + entity.forEach((field, value) -> { if (StrUtil.isNotBlank(field)) { if (fieldsPart.length() > 0) { // 非第一个参数,追加逗号 @@ -92,12 +93,12 @@ public class MysqlDialect extends AnsiSqlDialect{ tableName = this.quoteWrapper.wrap(tableName); } builder.append("INSERT INTO ").append(tableName) - // 字段列表 - .append(" (").append(fieldsPart) - // 更新值列表 - .append(") VALUES (").append(placeHolder) - // 主键冲突后的更新操作 - .append(") ON DUPLICATE KEY UPDATE ").append(updateHolder); + // 字段列表 + .append(" (").append(fieldsPart) + // 更新值列表 + .append(") VALUES (").append(placeHolder) + // 主键冲突后的更新操作 + .append(") ON DUPLICATE KEY UPDATE ").append(updateHolder); return StatementUtil.prepareStatement(conn, builder); } diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/PostgresqlDialect.java b/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/PostgresqlDialect.java index 9082f8de0..181c00b8a 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/PostgresqlDialect.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/dialect/impl/PostgresqlDialect.java @@ -12,19 +12,18 @@ package org.dromara.hutool.db.dialect.impl; -import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.array.ArrayUtil; +import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.text.CharUtil; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.db.Entity; import org.dromara.hutool.db.StatementUtil; import org.dromara.hutool.db.dialect.DialectName; -import org.dromara.hutool.db.sql.SqlBuilder; import org.dromara.hutool.db.sql.QuoteWrapper; +import org.dromara.hutool.db.sql.SqlBuilder; import java.sql.Connection; import java.sql.PreparedStatement; -import java.sql.SQLException; /** @@ -48,7 +47,7 @@ public class PostgresqlDialect extends AnsiSqlDialect { } @Override - public PreparedStatement psForUpsert(final Connection conn, final Entity entity, final String... keys) throws SQLException { + public PreparedStatement psForUpsert(final Connection conn, final Entity entity, String... keys) { Assert.notEmpty(keys, "Keys must be not empty for Postgres."); SqlBuilder.validateEntity(entity); final SqlBuilder builder = SqlBuilder.of(quoteWrapper); @@ -78,6 +77,7 @@ public class PostgresqlDialect extends AnsiSqlDialect { String tableName = entity.getTableName(); if (null != this.quoteWrapper) { tableName = this.quoteWrapper.wrap(tableName); + keys = quoteWrapper.wrap(keys); } builder.append("INSERT INTO ").append(tableName) // 字段列表