sql >> Database teknologi >  >> RDS >> Oracle

Spring JDBC BeanPropertyRowMapper ja nej ('Y','N') til boolean bean-egenskaber

Så jeg fandt ud af, hvordan man gør dette. Jeg udvidede BeanPropertyRowMapper og håndterer boolean-typer gennem noget tilpasset kode, før jeg overlod kontrollen til beanpropertyrowmapper for resten af ​​datatyperne.

Bemærk:Det virker for mig, fordi jeg bruger Oracle, og alle kolonnerne af 'boolesk' type er strenge med værdier af typen 'y', 'yes', 'n' og 'no'.

De, der bruger numerisk 1,0 eller andre formater, kunne potentielt forbedre det yderligere ved at gøre det generisk gennem et objekt ja-kort og hente objekter fra resultatsæt og slå dem op i dette kort. Håber dette hjælper en anden i en situation som min.

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. Tilslutning til PostgreSQL-database gennem SSH-tunneling i Python

  2. Hvordan synkroniseres Visual Foxpro dbfs med MySQL?

  3. Adgang til en XAMPP mysql via Python

  4. tegnsæt i MySQL-replikering