gpt4 book ai didi

database - Spring JDBC BeanPropertyRowMapper 是 否 ('Y' ,'N' ) 到 boolean bean 属性

转载 作者:太空狗 更新时间:2023-10-30 01:58:52 24 4
gpt4 key购买 nike

我有一个包含一些字符串、整数和 boolean 字段的类。我为他们声明了 getter 和 setter。

public class SomeClass {

private int id;
private String description;
private boolean active;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}


}

我是 BeanPropertyRowMapper,负责从 Oracle 数据库获取所有对象。

@Override
public List<Destination> getAll() {
List<SomeClass> objs = jdbcTemplate.query(
myQuery, new BeanPropertyRowMapper<SomeClass>(SomeClass.class));
return objs;
}

如果打开调试,我会看到:

[3/14/13 10:02:09:202 EDT] 00000018 SystemOut     O DEBUG BeanPropertyRowMapper - Mapping column 'ID' to property 'id' of type int
[3/14/13 10:02:09:202 EDT] 00000018 SystemOut O DEBUG BeanPropertyRowMapper - Mapping column 'DESCRIPTION' to property 'description' of type class java.lang.String

然后尝试映射事件失败。事件在数据库中定义为 1 字节 CHAR,值为“Y”或“N”。使用 BeanPropertyRowMapper 并将“Y”和“N”等值成功转换为 boolean 值的最佳方法是什么?

最佳答案

所以我想出了如何做到这一点。在将其余数据类型的控制权移交给 beanpropertyrowmapper 之前,我通过一些自定义代码扩展了 BeanPropertyRowMapper 和处理程序 boolean 类型。

注意:它适用于我,因为我使用 oracle,并且所有“boolean ”类型的列都是具有“y”、“yes”、“n”和“no”类型值的字符串。

那些使用数字 1,0 或其他格式的人可能会进一步改进它,方法是通过对象 yes 映射使其通用并从结果集中获取对象并在此映射中查找它们。希望这对处于像我这种情况的其他人有所帮助。

import java.beans.PropertyDescriptor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;

/**
* Extends BeanPropertyRowMapper to allow for boolean fields
* mapped to 'Y,'N' type column to get set correctly. Using stock BeanPropertyRowMapper
* would throw a SQLException.
*
*/
public class ExtendedBeanPropertyRowMapper<T> extends BeanPropertyRowMapper<T> {

//Contains valid true values
public static final Set<String> TRUE_SET = new HashSet<String>(Arrays.asList("y", "yes", "true"));

public ExtendedBeanPropertyRowMapper(Class<T> class1) {
super(class1);
}

@Override
/**
* Override <code>getColumnValue</code> to add ability to map 'Y','N' type columns to
* boolean properties.
*
* @param rs is the ResultSet holding the data
* @param index is the column index
* @param pd the bean property that each result object is expected to match
* (or <code>null</code> if none specified)
* @return the Object value
* @throws SQLException in case of extraction failure
* @see org.springframework.jdbc.core.BeanPropertyRowMapper#getColumnValue(java.sql.ResultSet, int, PropertyDescriptor)
*/
protected Object getColumnValue(ResultSet rs, int index,
PropertyDescriptor pd) throws SQLException {
Class<?> requiredType = pd.getPropertyType();
if (boolean.class.equals(requiredType) || Boolean.class.equals(requiredType)) {
String stringValue = rs.getString(index);
if(!StringUtils.isEmpty(stringValue) && TRUE_SET.contains(stringValue.toLowerCase())){
return true;
}
else return false;
}
return super.getColumnValue(rs, index, pd);
}
}

关于database - Spring JDBC BeanPropertyRowMapper 是 否 ('Y' ,'N' ) 到 boolean bean 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411843/

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