如何使用不同策略的片段制作字符串静态?

时间:2016-01-12 10:13:42

标签: java string static sqlconnection

当我们使用+运算符连接编译时静态字符串时,编译器会将它们连接在一起并在其位置存储一个新的静态字符串。

现在我有一个策略模式,它提供应该连接成更大的SQL语句的SQL片段。所有部分都是静态的,但由于涉及方法调用,因此上述编译时加入不会发生。

示例:

class MagicDao {
    void Object daoMethod(GetStuff cmd) {
        String sql = "select ... where " + cmd.getWhereClause() + " order by ...";
        // ...
    }
}

public interface GetStuff {
    String getWhereClause();

    Object[] getParameters();
}

class GetFunStuff implements GetStuff {
    public String getWhereClause() {
        return " abc = ? ";
    }

    // ...
}

我想知道是否有任何模式/技巧可以使SQL字符串串联再次编译,同时保留上述代码的简单性/可读性。

(如果缓存是唯一的解决方案,那么可以建议一个可读的,线程安全的一个班轮吗?)

(这样做的动机:使事物静态化将在字符串构建过程中每秒节省无数垃圾,并节省在PreparedStatement缓存中查找字符串的时间。)

1 个答案:

答案 0 :(得分:0)

我真的不知道你是如何进行SQL查询的,但你可以考虑使用JDBC \.co\.uk\­/(?:[^\/\n]+\­/)?([^\/\n]+­) ,如:

PreparedStatement

在这种情况下,您的PreparedStatement pstmt = con.prepareStatement("select ... where ? order by ..."); pstmt.setString(1, cmd.getWhereClause()); 将被预编译