我正在忙于开发一个SQL查询构建器util,它允许我轻松快速地编写SQL查询。我已经为实际的查询构建器排序了基础,但是当我在数据库实体(即表和列)的字符串文字/常量上使用某种形式时,我感到困惑。 我想要的是做这样的事情:
String sqlQuery = queryBuilder.select(Tables.Users.FirstName)
.where(Tables.Users.Age >= 10)
.build()
.toString();
我已经阅读了很多关于枚举以及如何嵌套它们的内容,但似乎我必须为每个表创建一个枚举(每个包含特定的列)。如果可能的话,我希望有一个类,其中包含所有表,每个表包含所有列。 这应该允许我通过简单地调用类似:
来“构建”一个字符串文字Tables.Address (returns the string value for 'address' table)
Tables.Address.Country (returns the string value for 'country' column)
这是我到目前为止使用枚举尝试的但不完全是我想要的。
public enum Table {
Users("users"),
Addresses("addresses"),
private String tableName;
Table(String tableName) {
this.tableName = tableName;
}
public String getName() {
return tableName;
}
}
public enum Column {
ID(Table.Users, "id"),
NAME(Table.Users, "name");
private Table table;
private String columnName;
Column(Table table, String columnName) {
this.table = table;
this.columnName = columnName;
}
public String getColumnName() {
return columnName;
}
}
答案 0 :(得分:1)
首先,我真的不明白你为什么要重新发明已多次发明的车轮。
因此,如果您正在开发库以便使用它,请查看JOOQ。但是,如果你真的想开发自己的查询构建器,你可能会发现我的项目BeanCrumbs非常有用。
答案 1 :(得分:0)
Enum不是要走的路;他们不够灵活。您需要访问附加到的每个数据库模式的元数据。
我从未理解为什么像你这样的解决方案被认为比编写SQL并使用JDBC执行更好。使用构建器和编写SQL一样多。
仅供参考 - 您意识到您不是解决此问题的第一个或最佳尝试。 Spring JDBC模板采用样板并且不与关系数据库交互。 iBatis已经存在了很长时间并且已经得到充分证明。有许多ORM解决方案,比如Hibernate,但这些解决方案太过分了。我不推荐那些。 JPA内置于Java EE规范中。
我不想在一个重新发明这种轮子的团队中工作,并迫使我更倾向于使用经过验证的商品解决方案。
答案 2 :(得分:0)
我一直非常成功地使用ActiveJDBC。 请参阅设计原则中的第一点,这就是应用“约定优于配置”原则