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();
}
}
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();
}
}
本文介绍了一种扩展Apache Commons DbUtils BeanProcessor的方法,用于处理数据库元数据与Java Bean属性之间的映射,特别针对带有下划线的字段名转换为驼峰命名法。
2390

被折叠的 条评论
为什么被折叠?



