Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Spring JDBC BeanPropertyRowMapper ya tidak ('Y','N') ke properti kacang boolean

Jadi saya menemukan cara untuk melakukan ini. Saya memperluas tipe boolean BeanPropertyRowMapper dan handler melalui beberapa kode kustom sebelum menyerahkan kontrol ke beanpropertyrowmapper untuk tipe data lainnya.

Catatan:Ini bekerja untuk saya karena saya menggunakan Oracle dan semua kolom tipe 'boolean' adalah string dengan nilai tipe 'y','yes','n' &'no'.

Mereka yang menggunakan numerik 1,0 atau format lain berpotensi dapat meningkatkannya lebih jauh dengan menjadikannya generik melalui peta objek ya dan mendapatkan objek dari resultet dan mencarinya di peta ini. Semoga ini bisa membantu orang lain dalam situasi seperti saya.

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. Cara tercepat untuk menyisipkan sejuta baris di Oracle

  2. Cara menggunakan fungsi Analitik di oracle (Over Partition by Keyword)

  3. Bisakah prosedur SQL mengembalikan tabel?

  4. Bagaimana cara membuat tampilan dengan beberapa kueri pemilihan yang mengembalikan beberapa baris di Oracle?

  5. Oracle:PADA PEMBARUAN KUNCI DUPLICATE