gpt4 book ai didi

java - java类设计指南

转载 作者:行者123 更新时间:2023-12-01 22:43:21 25 4
gpt4 key购买 nike

我正在构建一个数据工具,允许用户构建 ETL 代码。在深入了解这一点之前,我需要构建一个“代理”来处理该工具需要执行的所有与数据库相关的工作。具体来说,这将涉及 -

  • 选择、插入、更新和删除
  • 多条记录
  • 从/到/在具有不同布局的不同表格中

我的想法是使用以下 4 个方法构建一个类 -

ArrayList[][] selectFromRepository  (String dbTable, String[] columnNames)
ArrayList[][] selectFromRepository (String dbTable, String[] columnNames, Map<String, Object> predicate)
void insertToRepository (String dbTable, Map<String, Object>[] payload)
void updateInRepository (String dbTable, Map<String, Object>[] payload, Map<String,Object>[] predicate)
void deleteFromRepository (String dbTable, Map<String, Object>[] payload)

selectFromRepository 将根据从参数“dbTable”检索到的“columnNames”中元素的类型,以异构元素的 2D 数组列表进行响应。重载版本允许通过“谓词”映射指定 where 子句谓词。我想我可以检查传递给该方法的 Map 对象元素的类型并正确构建 where 子句(例如

"where " + key + " = '" + predicate.get(k) + "'" if predicate.get(k) instanceOf String 

等等..

其他方法的工作方式与更新方法谓词类似,与重载选择的工作方式类似。

我正在寻求您关于最佳实践、我的想法的缺点的指导(以及您按照自己的方式做事的优点:))。另外,构建一个名为 DB 元素的通用类型是否有意义,该类型接受我希望用作类型输入的所有已知 DB 数据类型,然后在映射/数组列表参数中使用它而不是“对象”类型?

提前致谢!

最佳答案

这确实是一个问题。

首先我不会自己实现这个。有许多免费的库(Spring、Hibernate)为您完成此操作,并且以 ORM 的形式更好 ( http://en.wikipedia.org/wiki/Object-relational_mapping )。

如果您确实想自己执行此操作,我会这样做:

我将遵循 ADO 并为我拥有的每个表创建一个类。例如,我将为我的员工表创建 Employee 类。

然后我将创建一个查询生成器,如下所示:

QueryBuilder
.selectFrom(Employee.class)
.equalTo(propery, value)
.graterThenOrEqualTo(property, value);

我的属性看起来像这样:

interface Property<From, To>{
To get(From from);
}

例如:

class EmployeeToId<Employee, Integer>{
public Integer get(Employee emp){
return emp.id;
}
}

所以在我之前的例子中:

QueryBuilder
.selectFrom(Employee.class)
.equalTo(new EmployeeToId(), 15)
.build().fetch(); // This returns an Optional<Collection<Employee>>;

我的查询生成器有许多方法,例如:

class QueryBuilder{
public <Entity> SelectBuilder<Entity> selectFrom(Class<Entity> clazz);
}

这只是它的要点。您可以根据自己的喜好将其复杂化。但要做好,这需要很多时间,只需询问 hibernate 或 jooq。

关于java - java类设计指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25769236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com