Spring Boot 中使用 H2 数据库:https://blog.csdn.net/qq_40794973/article/details/106354143
https://www.runoob.com/w3cnote/java-stringtokenizer-intro.html
- org.hibernate.engine.jdbc.spi.SqlStatementLogger#logStatement(java.lang.String, org.hibernate.engine.jdbc.internal.Formatter)
- org.hibernate.engine.jdbc.internal.StatementPreparerImpl.StatementPreparationTemplate#prepareStatement
public class StringHelper {
public static final String WHITESPACE = " \n\r\f\t";
}
public interface Formatter {
String format(String source);
}
import java.util.*;
public class BasicFormatterImpl implements Formatter {
private static final Set<String> BEGIN_CLAUSES = new HashSet<>();
private static final Set<String> END_CLAUSES = new HashSet<>();
private static final Set<String> LOGICAL = new HashSet<>();
private static final Set<String> QUANTIFIERS = new HashSet<>();
private static final Set<String> DML = new HashSet<>();
private static final Set<String> MISC = new HashSet<>();
static {
BEGIN_CLAUSES.add("left");
BEGIN_CLAUSES.add("right");
BEGIN_CLAUSES.add("inner");
BEGIN_CLAUSES.add("outer");
BEGIN_CLAUSES.add("group");
BEGIN_CLAUSES.add("order");
END_CLAUSES.add("where");
END_CLAUSES.add("set");
END_CLAUSES.add("having");
END_CLAUSES.add("join");
END_CLAUSES.add("from");
END_CLAUSES.add("by");
END_CLAUSES.add("into");
END_CLAUSES.add("union");
LOGICAL.add("and");
LOGICAL.add("or");
LOGICAL.add("when");
LOGICAL.add("else");
LOGICAL.add("end");
QUANTIFIERS.add("in");
QUANTIFIERS.add("all");
QUANTIFIERS.add("exists");
QUANTIFIERS.add("some");
QUANTIFIERS.add("any");
DML.add("insert");
DML.add("update");
DML.add("delete");
MISC.add("select");
MISC.add("on");
}
pr