diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/SqlBuilder.java b/hutool-db/src/main/java/cn/hutool/db/sql/SqlBuilder.java index a2a52634d..2dd2b5d25 100644 --- a/hutool-db/src/main/java/cn/hutool/db/sql/SqlBuilder.java +++ b/hutool-db/src/main/java/cn/hutool/db/sql/SqlBuilder.java @@ -609,6 +609,15 @@ public class SqlBuilder implements Builder { return this.build(); } + /** + * 格式化SQL语句 + * @return SqlBuilder + */ + public SqlBuilder format() { + this.sql.replace(0, this.sql.length(), SqlFormatter.format(this.sql.toString())); + return this; + } + // --------------------------------------------------------------- private method start /** diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/SqlFormatter.java b/hutool-db/src/main/java/cn/hutool/db/sql/SqlFormatter.java index 52b94663f..2d2ba5f88 100644 --- a/hutool-db/src/main/java/cn/hutool/db/sql/SqlFormatter.java +++ b/hutool-db/src/main/java/cn/hutool/db/sql/SqlFormatter.java @@ -110,6 +110,12 @@ public class SqlFormatter { t = this.tokens.nextToken(); this.token += t; } while (!"\"".equals(t)); + } else if ("`".equals(this.token)) { + String t; + do { + t = this.tokens.nextToken(); + this.token += t; + } while (!"`".equals(t)); } if ((this.afterByOrSetOrFromOrSelect) && (",".equals(this.token))) { diff --git a/hutool-db/src/test/java/cn/hutool/db/sql/SqlFormatterTest.java b/hutool-db/src/test/java/cn/hutool/db/sql/SqlFormatterTest.java index 495023ba9..2fbd7c24b 100755 --- a/hutool-db/src/test/java/cn/hutool/db/sql/SqlFormatterTest.java +++ b/hutool-db/src/test/java/cn/hutool/db/sql/SqlFormatterTest.java @@ -11,4 +11,18 @@ public class SqlFormatterTest { String sql = "(select 1 from dual) union all (select 1 from dual)"; SqlFormatter.format(sql); } + + @Test + public void testKeyword() { + String sql = "select * from `order`"; + String format = SqlFormatter.format(sql); + System.out.println(format); + } + + @Test + public void testSqlBuilderFormat() { + String sql = "SELECT `link_table_a`.`value_a` AS `link_table_a.value_a`,`link_table_a`.`id` AS `link_table_a.id`,`link_table_b`.`value_b` AS `link_table_b.value_b`,`link_table_c`.`id` AS `link_table_c.id`,`link_table_b`.`id` AS `link_table_b.id`,`link_table_c`.`value_c` AS `link_table_c.value_c` FROM `link_table_a` INNER JOIN `link_table_b` ON `link_table_a`.`table_b_id` = `link_table_b`.`id` INNER JOIN `link_table_c` ON `link_table_b`.`table_c_id` = `link_table_c`.`id`"; + String format = SqlBuilder.of(sql).format().build(); + System.out.println(format); + } }