Java字段猜测

Java字段猜测,java,database,class,Java,Database,Class,我正在开发一个从数据库中提取数据的小型Java库 假设有一个通用Java类: 公共类MyClass{ public int valueA; public String valueB; public Double valueC; //getter and setter methods. } 之后,我定义了一个SQL查询字符串,得到了泛型类MyClass的类 String sql = "Select c.valueA, c.valueB, c.valueC from my

我正在开发一个从数据库中提取数据的小型Java库

假设有一个通用Java类:

公共类MyClass{

   public int valueA;
   public String valueB;
   public Double valueC;

   //getter and setter methods.
}
之后,我定义了一个SQL查询字符串,得到了泛型类
MyClass
的类

String sql = "Select c.valueA, c.valueB, c.valueC from my_table c";
Class<MyClass> type = MyClass.class;
List<MyClass> results = extractData(sql, type)M   
在实践中,如果可能,如何实施步骤2.2?


我想这是可能的,因为我在PHP框架中使用了这种方法。

您几乎肯定希望在这里使用第三方映射器

另外,请阅读这篇文章,因为这是最好的两篇文章,答案也很好:

您需要的是结果集元数据(获取列的名称),以及分析类和设置字段的反射。在这两者之间需要编写大量粘合代码(例如,从类的字段类型中,您需要猜测每个列使用哪个getXXX()/数据类型)


它并不太复杂,但需要一些思考。有许多潜在的边缘情况(例如继承)以及如何处理隐式类型转换(当类字段和列数据类型不直接兼容时)寻找“反射”。看起来你正在构建一个ORM映射器。看看现有的解决方案可能是值得的。它们并不象JPA/Hibernate那么重,例如考虑iBATS或谷歌。我会看看它们两个。谢谢。你可以。而且他可以求助于代码> java。SQL。这将调用基于类型的setter/getter方法。这是一个一小时的工作!当然,他需要
java.lang.reflect
中的类来解析getter/setter方法名称。最后,ORM会更好,因为它嵌入了很多好的特性,但我同意这不是必须的!ORM本质上也做同样的事情(有点复杂,上面放了很多糖,但原理完全一样),我假设TC想将此作为一种学习体验或是一项任务来完成。对于一个普通项目,使用ORM可以节省调试时间和白发。我同意你的观点。这与我的观点相同,但有一点改进。我只想指出,ORM通常通过生成类t来查看所选数据库然后,通过查询(通常由查询生成器提供)可以很容易地从所表示的表中获取对象。
public<T> List<T> extractData(String sql, Class<T> type){
  //1)Do everything that is necessary to retrieve a ResultSet by the sql String.   
  //2)Then, for each row in the ResultSet
  //2.1)Create a new instance of object of type T.
  //2.2)Automatically matches the field name from the query
  //   with the field name of the specified class.
  //2.3) add the object to the list to be returned.
  //3) return the list of results of type T.
}