2011-08-24 97 views

回答

2

除了topchef的回答,你可能会使用一些常规的地图mag IC

如果你限制你的SQL到您的Java类的属性(假设你可以保留在内存中一次整个结果),那么你就应该能够使用rows方法获取GroovyRowResultList一个对象(每行一个)。由于这个类是Map的一个实例,Groovy将使用它来为您construct your java object automatically

class MyJavaClass { 
    String property1, property2, property3 
} 

sql.rows("select property1, property2, property3 from temp_table").each { row -> 
    MyJavaClass e = row 
} 
1

一些常规魔法帮助:

def filtered = ['property1', 'property2', ....] 

sql.eachRow("select * from temp_table") { 

     def e = new MyJavaClass(it.properties.findAll{filtered.contains(it.key)}) 

} 

鉴于

  • 列表filtered包含您想复制所有属性名;
  • 您的表列名称对应于MyJavaClass声明的属性名称(与列表filtered中的相同);
  • MyJavaClass同时具有默认(空)构造函数和构造函数 ,它将所有属性作为参数;
  • MyJavaClass声明公共设置者的属性;

如:

public MyJavaClass() {} 

    public MyJavaClass(String property1, String property2, ....) { 
     this.property1 = property1; 
     this.property2 = property2; 
     .... } 

    public void setProperty1(String property1) {this.property1 = property1;} 
    public void setProperty2(String property2) {this.property2 = property2;} 
    .... 

你可以使用filtered因为这样不需要的属性的列表:

def filtered = ['class', 'metaClass', ....] 

则:

def e = new MyJavaClass(it.properties.findAll{!filtered.contains(it.key)}) 
相关问题