sql >> Database >  >> RDS >> Oracle

Spring JDBC BeanPropertyRowMapper ja nee ('Y','N') naar boolean bean-eigenschappen

Dus ik bedacht hoe ik dit moest doen. Ik heb BeanPropertyRowMapper en handler boolean-typen uitgebreid met een aangepaste code voordat ik de besturing overhandigde aan beanpropertyrowmapper voor de rest van de gegevenstypen.

Opmerking:het werkt voor mij omdat ik orakel gebruik en alle kolommen van het 'boolean'-type strings zijn met waarden van het type 'y','yes','n' &'no'.

Degenen die numerieke 1,0 of andere formaten gebruiken, zouden het mogelijk verder kunnen verbeteren door het generiek te maken via een object-ja-kaart en objecten uit de resultatenset te halen en ze op deze kaart op te zoeken. Ik hoop dat dit iemand anders helpt in een situatie als de mijne.

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);
    }
}


  1. Ik kan er niet achter komen wat voor fout ik heb begaan bij het maken van deze MYSQL-query

  2. Datamapper ORM- Codeigniter Advance Relationship

  3. Alternatieve oplossing voor DCount en DLookup met MS SQL Server Backend

  4. SQLSTATE[HY000] [2005] Onbekende MySQL-serverhost 'localhost:3306' (2)