Oracle
 sql >> база данни >  >> RDS >> Oracle

Spring JDBC BeanPropertyRowMapper да не ('Y','N') към булевите свойства на bean

Така че разбрах как да направя това. Разширих BeanPropertyRowMapper и булевите типове на манипулатора чрез някакъв персонализиран код, преди да предам контрола на beanpropertyrowmapper за останалите типове данни.

Забележка:Работи за мен, защото използвам oracle и всички колони от тип „boolean“ са низове със стойности от тип „y“, „yes“, „n“ &„no“.

Тези, които използват числови 1,0 или други формати, биха могли потенциално да го подобрят допълнително, като го направят общ чрез карта на обекти и получаване на обекти от набор с резултати и търсенето им в тази карта. Надявам се това да помогне на някой друг в ситуация като моята.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съветникът за модел на данни на обект получава изключение, когато се опитва да добави нова Oracle връзка

  2. Разлика между BYTE и CHAR в типовете данни на колоните

  3. Как да разбера дали база данни на Oracle е настроена за автоматично завършване?

  4. Разделете низа на токени в pl sql

  5. Perl DBI - стартирайте SQL скрипт с множество изрази