DbUtils 扩展BeanProcessor的处理方式,使其能够处理如DATA_OBJECT_NAME -> dataObjectName这样的映射关系

本文介绍了一种扩展Apache Commons DbUtils BeanProcessor的方法,用于处理数据库元数据与Java Bean属性之间的映射,特别针对带有下划线的字段名转换为驼峰命名法。
package com.moya.tool;


import java.beans.PropertyDescriptor;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Arrays;


import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.lang3.StringUtils;
/**
 * 扩展BeanProcessor的处理方式,使其能够处理如DATA_OBJECT_NAME -> dataObjectName这样的映射关系 */


public class GenBeanProcess extends BeanProcessor {
/**
     * 替换BeanProcessor的映射关系处理
     */
    @Override
    protected int[] mapColumnsToProperties(ResultSetMetaData rsmd, PropertyDescriptor[] props) throws SQLException {
            int cols = rsmd.getColumnCount();
            int[] columnToProperty = new int[cols + 1];
            Arrays.fill(columnToProperty, PROPERTY_NOT_FOUND);
            for (int col = 1; col <= cols; col++) {
                    String columnName = rsmd.getColumnLabel(col);
                    if (null == columnName || 0 == columnName.length()) {
                            columnName = rsmd.getColumnLabel(col);
                    }
                    for (int i = 0; i < props.length; i++) {
                            if (convert(columnName).equals(props[i].getName())) {
                                    columnToProperty[col] = i;
                                    break;
                            }
                    }
            }
            return columnToProperty;
    }        /**
     * DATA_OBJECT_NAME -> dataObjectName
     */
    private String convert(String objName) {
            StringBuilder result = new StringBuilder();
            String[] tokens = objName.split("_");
            for (String token : tokens) {
                    if (result.length() == 0)
                            result.append(token.toLowerCase());
                    else
                            result.append(StringUtils.capitalize(token.toLowerCase()));
            }
            return result.toString();
    }


}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值