java - 使用表数据在java中动态创建一个类

标签 java dynamic collections properties

我有以下要求, 我需要公开一个 API,用户可以在其中发送自由形式的“查询”之类的表达式,并且我需要返回 true/false。 例如:对于汽车对象,如果查询是

" (make = 'FORD' AND year IN (1990,1991)) OR type = 'SUV') ".

但是,“make”、“year”或“type”来自外部填充的表。

TABLE CAR_PROPERTIES (
 propertyName VARCHAR2(40),
 propertyValue VARCHAR2(10)
)

我首先遍历其他连接表来加载属性。

所以,如果有新的属性(和相应的值),我需要在查询中支持。

到目前为止,这就是我所做的:

  1. 如果不需要向类添加动态属性,我知道我 可以在我的 Collection 中使用像 JoSQL 这样的东西。

  2. 一旦应用程序使用 Java Tools API 或 javaassist 启动,我就会考虑动态创建该类。

客户端坚持采用不需要添加新属性和部署代码的解决方案(尽管此 API 的“调用者”确实需要更改代码才能在查询中使用新属性)。

我不喜欢动态创建新类。寻找任何指示或解决方案。

最佳答案

Raj - 只是为您的设计提供一些建议和灵感:

  1. 甚至不会进行完整的 O/R 映射。我会考虑将您的领域特定语言翻译成 SQL。我用Python做过这样的事情。这要容易得多,因为您正在两种简单语言(自定义 DSL 和 SQL)之间进行语言到语言的翻译。通过强大的正则表达式,您可以拥有一个非常简洁且强大的框架来处理此类交互。 (参见 Regex Table Lexer 和其他模式)

  2. 有一些有趣的设计值得研究:

  3. 对于动态关系和属性表达式,我建议(嵌入)图数据结构 这是一个有用的教程,显示了相对图映射:
    http://py2neo.org/tutorials/tables_to_graphs
    以及 Neo4J 的教程,我将其用于类似目的:
    http://docs.neo4j.org/chunked/stable/tutorials.html

关于java - 使用表数据在java中动态创建一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11769765/

相关文章:

java - 在 APK 上使用 jarsigner -verify 要求我指定别名?

java - java - 如何在不重新排序的情况下从列表中删除重复项?

javascript - 如何将数组转换为集合

Java/JUnit - 测试预定义多项式时出现断言错误

java - Java Matcher.find 和 Matcher.group 的 C#/.NET 等效项

Java 使用 linux sudo 能力

dynamic - 如何使用pg_shard进行动态缩放

java - Android 中使用 SharedPreferences 的动态列表

php - MySql 中表的动态 header

java - Collection 中是否有一个对象不是静态的?