Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Spring JDBC BeanPropertyRowMapper yes no ('Y', 'N') cho thuộc tính bean boolean

Vì vậy, tôi đã tìm ra cách để làm điều này. Tôi đã mở rộng BeanPropertyRowMapper và xử lý các kiểu boolean thông qua một số mã tùy chỉnh trước khi chuyển giao quyền kiểm soát cho beanpropertyrowmapper đối với các kiểu dữ liệu còn lại.

Lưu ý:Nó phù hợp với tôi vì tôi sử dụng oracle và tất cả các cột kiểu 'boolean' là các chuỗi có giá trị kiểu 'y', 'yes', 'n' &'no'.

Những người sử dụng số 1,0 hoặc các định dạng khác có thể cải thiện nó hơn nữa bằng cách làm cho nó chung chung thông qua một bản đồ có đối tượng và lấy các đối tượng từ tập kết quả và tra cứu chúng trong bản đồ này. Hy vọng điều này sẽ giúp ai đó trong hoàn cảnh như tôi.

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. Hàm DATEDIFF trong Oracle

  2. xem tất cả dữ liệu cho các hàng trùng lặp trong oracle

  3. làm thế nào để gửi tin nhắn SMS qua oracle 11g? khách hàng là con cóc và ở Ấn Độ, tôi phải gửi sms

  4. SQL Điền vào dữ liệu riêng biệt và một chuỗi

  5. Định cấu hình SQL * Plus để trả về không có gì ngoài dữ liệu