用于定义SQL命令和查询的流畅界面

时间:2015-09-29 19:49:50

标签: java fluent-interface

我创建了一组用于在各种数据库管理系统上构建SQL命令和查询的类。 所有课程都支持流畅的编程,到目前为止工作正常。

主类叫做SQL,有静态方法INSERT()UPDATE()SELECT()... 所有这些方法都返回我的类的新实例SQLInsert(),SQLUpdate(),SQLSelect()......

为了使ist尽可能短,我删除了所有不必要的东西,以便了解这些类是如何工作的。

我的课程SQL

public class SQL {
    private SQL() {  }
    public static SQLInsert INSERT() { return new SQLInsert(); }
    public static SQLUpdate UPDATE() { return new SQLUpdate(); }
    // ...
}

我的类SQLInsert

public class SQLInsert {
    // properties
    private String tableName;
    private final ArrayList<String> colNames = new ArrayList();
    // constructor
    public SQLInsert() { }
    // fluent methods
    public SQLInsert TABLE(String tbl) {
        tableName = tbl;
        return this;
    }
    public SQLInsert COLUMNS(String... cols) {
        for (String col : cols) { colNames.add(columnname); }
        return this;
    }
    // and so on
}

使用这些类我可以这样编码:

SQL.INSERT().TABLE("test").COLUMNS("col1","col2").VALUES("test",100).execute(connection);
ResultSet rs = SQL.SELECT().COLUMNS("*").FROM("test").query(connection)

我的所有课程都只提供在上下文中有意义的方法。 SQLInsert没有方法WHERE(),但是方法SELECT()用于定义子选择。

SQL.INSERT().TABLE("test").SELECT( 
    SQL.SELECT().COLUMNS(...).FROM(...) 
);

是一个有效的陈述。

但是现在我需要SQL-CREATE语句的新类。我想使用我的新课程如下

SQL.CREATE().TABLE(name). ...
SQL.CREATE().INDEX(name). ...

我的班级SQLCreate

public class SQLCreate {
    public SQLCreate() {}
    public static SQLCreateIndex INDEX(String name) {
        return new SQLCreateIndex(name);
    }
    public static SQLCreateTable TABLE(String name) {
        return new SQLCreateTable(name);
    }
}

不幸的是,似乎没有像预期的那样工作。 键入SQL.CREATE()后。我无法访问方法INDEX() 测试了很多,但没有任何作用。任何人都可以给我正确的提示吗?

THX。

0 个答案:

没有答案