You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Stevo Slavic (JIRA)" <ji...@apache.org> on 2012/07/06 12:34:33 UTC

[jira] [Commented] (DBUTILS-91) Enhance BasicRowProcessor to have row mapping easier to configure

    [ https://issues.apache.org/jira/browse/DBUTILS-91?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13407882#comment-13407882 ] 

Stevo Slavic commented on DBUTILS-91:
-------------------------------------

Here is sample code that I currently (commons-dbutils:commons-dbutils:1.4:jar) have to use to override column to property name mapping:

{code}
final Map<String, String> columnToPropertyOverrides = new HashMap<>();
columnToPropertyOverrides.put("foo", "bar");
ResultSetHandler<List<Acme>> rsh = new BeanListHandler<Acme>(Acme.class, new BasicRowProcessor(new 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.getColumnName(col);
			}
			for (int i = 0; i < props.length; i++) {

				String propertyName = columnToPropertyOverrides.get(columnName);
				if (propertyName == null) {
					propertyName = columnName;
				}
				if (propertyName.equalsIgnoreCase(props[i].getName())) {
					columnToProperty[col] = i;
					break;
				}
			}
		}

		return columnToProperty;
	}
}));
{code}
                
> Enhance BasicRowProcessor to have row mapping easier to configure
> -----------------------------------------------------------------
>
>                 Key: DBUTILS-91
>                 URL: https://issues.apache.org/jira/browse/DBUTILS-91
>             Project: Commons DbUtils
>          Issue Type: Improvement
>    Affects Versions: 1.4
>            Reporter: Stevo Slavic
>
> {{BasicRowProcessor}} by default makes use of {{BeanProcessor}} for mapping result set row columns to bean property names. {{BeanProcessor}} uses bean property names, and performs case-insensitive matching of those names to column names.
> Currently {{BasicRowProcessor}} can be configured with custom {{BeanProcessor}} extension to customize the row mapping, but it gets rather ugly.
> It would be great if {{BeanProcessor}} was configurable with column name to bean property name strategy. Besides current strategy, DbUtils should also bundle strategy implementation configurable with a property name to column name (or other way around) map.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira