diff --git a/CHANGELOG.md b/CHANGELOG.md index d97789686..c5b72a602 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## 5.3.10 (2020-07-14) ### 新特性 +* 【db 】 增加DbUtil.setReturnGeneratedKeyGlobal(issue#I1NM0K@Gitee) + ### Bug修复 * 【core 】 修复ZipUtil中finish位于循环内的问题(issue#961@Github) diff --git a/hutool-core/src/test/java/cn/hutool/core/io/checksum/CrcTest.java b/hutool-core/src/test/java/cn/hutool/core/io/checksum/CrcTest.java index 8a20602f5..dbffdcc03 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/checksum/CrcTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/checksum/CrcTest.java @@ -32,4 +32,13 @@ public class CrcTest { crc.update(16); Assert.assertEquals("cc04", HexUtil.toHex(crc.getValue())); } + + @Test + public void crc16Test2() { + String str = "QN=20160801085857223;ST=23;CN=2011;PW=123456;MN=010000A8900016F000169DC0;Flag=5;CP=&&DataTime=20160801085857; LA-Rtd=50.1&&"; + CRC16 crc = new CRC16(); + crc.update(str.getBytes(), 0, str.getBytes().length); + String crc16 = HexUtil.toHex(crc.getValue()); + Assert.assertEquals("18c", crc16); + } } diff --git a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java index 8bf4381d9..382c44ac7 100644 --- a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java +++ b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java @@ -41,7 +41,7 @@ public abstract class AbstractDb implements Serializable { /** * 是否大小写不敏感(默认大小写不敏感) */ - protected boolean caseInsensitive = DbUtil.caseInsensitiveGlobal; + protected boolean caseInsensitive = GlobalDbConfig.caseInsensitive; protected SqlConnRunner runner; // ------------------------------------------------------- Constructor start diff --git a/hutool-db/src/main/java/cn/hutool/db/DbUtil.java b/hutool-db/src/main/java/cn/hutool/db/DbUtil.java index 1de03ef36..37543628f 100644 --- a/hutool-db/src/main/java/cn/hutool/db/DbUtil.java +++ b/hutool-db/src/main/java/cn/hutool/db/DbUtil.java @@ -5,9 +5,7 @@ import cn.hutool.core.io.IoUtil; import cn.hutool.db.dialect.Dialect; import cn.hutool.db.dialect.DialectFactory; import cn.hutool.db.ds.DSFactory; -import cn.hutool.db.sql.SqlLog; import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; import cn.hutool.log.level.Level; import cn.hutool.setting.Setting; @@ -22,12 +20,7 @@ import java.sql.Connection; * @author Luxiaolei */ public final class DbUtil { - private final static Log log = LogFactory.get(); - - /** - * 是否大小写不敏感(默认大小写不敏感) - */ - protected static boolean caseInsensitiveGlobal = true; + private final static Log log = Log.get(); /** * 实例化一个新的SQL运行对象 @@ -240,7 +233,7 @@ public final class DbUtil { * @since 4.1.7 */ public static void setShowSqlGlobal(boolean isShowSql, boolean isFormatSql, boolean isShowParams, Level level) { - SqlLog.INSTANCE.init(isShowSql, isFormatSql, isShowParams, level); + GlobalDbConfig.setShowSql(isShowSql, isFormatSql, isShowParams, level); } /** @@ -251,6 +244,18 @@ public final class DbUtil { * @since 5.2.4 */ public static void setCaseInsensitiveGlobal(boolean caseInsensitive) { - caseInsensitiveGlobal = caseInsensitive; + GlobalDbConfig.setCaseInsensitive(caseInsensitive); + } + + /** + * 设置全局是否INSERT语句中默认返回主键(默认返回主键)
+ * 如果false,则在Insert操作后,返回影响行数 + * 主要用于某些数据库不支持返回主键的情况 + * + * @param returnGeneratedKey 是否INSERT语句中默认返回主键 + * @since 5.3.10 + */ + public static void setReturnGeneratedKeyGlobal(boolean returnGeneratedKey) { + GlobalDbConfig.setReturnGeneratedKey(returnGeneratedKey); } } diff --git a/hutool-db/src/main/java/cn/hutool/db/GlobalDbConfig.java b/hutool-db/src/main/java/cn/hutool/db/GlobalDbConfig.java new file mode 100644 index 000000000..644e98519 --- /dev/null +++ b/hutool-db/src/main/java/cn/hutool/db/GlobalDbConfig.java @@ -0,0 +1,54 @@ +package cn.hutool.db; + +import cn.hutool.db.sql.SqlLog; +import cn.hutool.log.level.Level; + +/** + * DB全局配置配置项 + * + * @author looly + * @since 5.3.10 + */ +public class GlobalDbConfig { + /** + * 是否大小写不敏感(默认大小写不敏感) + */ + protected static boolean caseInsensitive = true; + /** + * 是否INSERT语句中默认返回主键(默认返回主键) + */ + protected static boolean returnGeneratedKey = true; + + /** + * 设置全局是否在结果中忽略大小写
+ * 如果忽略,则在Entity中调用getXXX时,字段值忽略大小写,默认忽略 + * + * @param isCaseInsensitive 否在结果中忽略大小写 + */ + public static void setCaseInsensitive(boolean isCaseInsensitive) { + caseInsensitive = isCaseInsensitive; + } + + /** + * 设置全局是否INSERT语句中默认返回主键(默认返回主键)
+ * 如果false,则在Insert操作后,返回影响行数 + * 主要用于某些数据库不支持返回主键的情况 + * + * @param isReturnGeneratedKey 是否INSERT语句中默认返回主键 + */ + public static void setReturnGeneratedKey(boolean isReturnGeneratedKey) { + returnGeneratedKey = isReturnGeneratedKey; + } + + /** + * 设置全局配置:是否通过debug日志显示SQL + * + * @param isShowSql 是否显示SQL + * @param isFormatSql 是否格式化显示的SQL + * @param isShowParams 是否打印参数 + * @param level SQL打印到的日志等级 + */ + public static void setShowSql(boolean isShowSql, boolean isFormatSql, boolean isShowParams, Level level) { + SqlLog.INSTANCE.init(isShowSql, isFormatSql, isShowParams, level); + } +} diff --git a/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java b/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java index 05626c507..ac428c8b7 100644 --- a/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java +++ b/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java @@ -39,7 +39,7 @@ public class SqlConnRunner implements Serializable { /** * 是否大小写不敏感(默认大小写不敏感) */ - protected boolean caseInsensitive = DbUtil.caseInsensitiveGlobal; + protected boolean caseInsensitive = GlobalDbConfig.caseInsensitive; /** * 实例化一个新的SQL运行对象 @@ -532,7 +532,7 @@ public class SqlConnRunner implements Serializable { //查询全部 if (null == page) { - List entityList = this.find(conn, fields, where, new EntityListHandler(DbUtil.caseInsensitiveGlobal)); + List entityList = this.find(conn, fields, where, new EntityListHandler(GlobalDbConfig.caseInsensitive)); final PageResult pageResult = new PageResult<>(0, entityList.size(), entityList.size()); pageResult.addAll(entityList); return pageResult; diff --git a/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java b/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java index b1c7dcb89..34f437560 100644 --- a/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java +++ b/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java @@ -124,7 +124,7 @@ public class StatementUtil { SqlLog.INSTANCE.log(sql, ArrayUtil.isEmpty(params) ? null : params); PreparedStatement ps; - if (StrUtil.startWithIgnoreCase(sql, "insert")) { + if (GlobalDbConfig.returnGeneratedKey && StrUtil.startWithIgnoreCase(sql, "insert")) { // 插入默认返回主键 ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); } else { diff --git a/hutool-db/src/test/java/cn/hutool/db/CRUDTest.java b/hutool-db/src/test/java/cn/hutool/db/CRUDTest.java index 671c98069..a1cb62a94 100644 --- a/hutool-db/src/test/java/cn/hutool/db/CRUDTest.java +++ b/hutool-db/src/test/java/cn/hutool/db/CRUDTest.java @@ -92,6 +92,13 @@ public class CRUDTest { Assert.assertEquals(2, results.size()); } + @Test + public void findInTest3() throws SQLException { + List results = db.findAll(Entity.create("user") + .set("id", new long[]{1, 2, 3})); + Assert.assertEquals(2, results.size()); + } + @Test public void findAllTest() throws SQLException { List results = db.findAll("user");