Java 处理比所需更多的属性

Java 处理比所需更多的属性,java,sql,groovy,properties,Java,Sql,Groovy,Properties,我试图通过SQL调用加载一组对象。SQL查询返回的属性比需要的多。除了更正SQL查询之外。如何让groovy在声明产品时忽略所有无关参数 import groovy.sql.Sql class Product { Integer id; Integer type; String unique; } def var = []; sql = Sql.newInstance("jdbc:jtds:sqlserver://localhost/[DB]", "user", "

我试图通过SQL调用加载一组对象。SQL查询返回的属性比需要的多。除了更正SQL查询之外。如何让groovy在声明产品时忽略所有无关参数

import groovy.sql.Sql

class Product {
    Integer id;
    Integer type;
    String unique; 
}

def var = [];
sql = Sql.newInstance("jdbc:jtds:sqlserver://localhost/[DB]", "user", "password","net.sourceforge.jtds.jdbc.Driver");
sql.eachRow("select * from Products", { var << new Product(it.toRowResult()) } );

Groovy的默认行为是每当您试图为bean中不存在的属性设置值时,抛出一个
Groovy.lang.MissingPropertyException
。我不太确定你是否能改变这种行为。但是,您可以编写一个助手方法来过滤掉不存在的属性

def filterResult(bean, row) {
    def filteredProps = [:]

    row.each { key, value ->
        if(bean.metaClass.properties.find { prop -> prop.name == key }) {
            filteredProps.put(key, value)  
        }
    } 

    filteredProps
}

def var = []

sql.eachRow("select * from Products", { 
    var << new Product(filterResult(Product, it.toRowResult())) 
})
def filterResult(bean,行){
def filteredProps=[:]
row.each{键,值->
if(bean.metaClass.properties.find{prop->prop.name==key}){
filteredrops.put(键,值)
}
} 
滤镜
}
def var=[]
eachRow(“从产品中选择*”,{

var默认的Groovy行为是每当您试图为bean中不存在的属性设置值时抛出一个
Groovy.lang.MissingPropertyException
。我不太确定您是否可以更改该行为。但是,您可以编写一个助手方法来过滤掉不存在的属性

def filterResult(bean, row) {
    def filteredProps = [:]

    row.each { key, value ->
        if(bean.metaClass.properties.find { prop -> prop.name == key }) {
            filteredProps.put(key, value)  
        }
    } 

    filteredProps
}

def var = []

sql.eachRow("select * from Products", { 
    var << new Product(filterResult(Product, it.toRowResult())) 
})
def filterResult(bean,行){
def filteredProps=[:]
row.each{键,值->
if(bean.metaClass.properties.find{prop->prop.name==key}){
filteredrops.put(键,值)
}
} 
滤镜
}
def var=[]
eachRow(“从产品中选择*”,{

这当然有道理,但我想象这些属性存储在一个散列映射中[而不是直接的1对1绑定]。因此,额外属性导致问题对我来说毫无意义。我错了吗?如果您没有完成所有属性,Groovy不会抱怨,只要您有足够的信息。默认情况下,Groovy确实会将映射项绑定到类中的属性中。因此,额外的键将导致Groovy.lang.MissingPropertyException、 如果覆盖产品(映射),则可以更改此行为。这当然是有意义的。但我认为属性存储在哈希映射中[而不是直接的1对1绑定]。因此,额外属性导致问题对我来说毫无意义。我错了吗?如果您没有完成所有属性,Groovy不会抱怨,只要您有足够的信息。默认情况下,Groovy确实会将映射项绑定到类中的属性中。因此,额外的键将导致Groovy.lang.MissingPropertyException、 如果覆盖产品(映射),则可以更改此行为。