All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.commons.dbutils.handlers.BeanMapHandler Maven / Gradle / Ivy

There is a newer version: 2.8.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.commons.dbutils.handlers;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbutils.RowProcessor;

/**
 * 

* ResultSetHandler implementation that returns a Map of Beans. * ResultSet rows are converted into Beans which are then stored in * a Map under the given key. *

*

* If you had a Person table with a primary key column called ID, you could * retrieve rows from the table like this: * *

 * ResultSetHandler<Map<Long, Person>> h = new BeanMapdHandler<Long, Person>(Person.class, "id");
 * Map&ltLong, Person> found = queryRunner.query("select id, name, age from person", h);
 * Person jane = found.get(1L); // jane's id is 1
 * String janesName = jane.getName();
 * Integer janesAge = jane.getAge();
 * 
* * Note that the "id" passed to BeanMapHandler can be in any case. The data type * returned for id is dependent upon how your JDBC driver converts SQL column * types from the Person table into Java types. The "name" and "age" columns are * converted according to their property descriptors by DbUtils. *

*

* This class is thread safe. *

* * @param * the type of keys maintained by the returned map * @param * the type of the bean * @see org.apache.commons.dbutils.ResultSetHandler * @since DbUtils 1.5 */ public class BeanMapHandler extends AbstractKeyedHandler { /** * The Class of beans produced by this handler. */ private final Class type; /** * The RowProcessor implementation to use when converting rows into Objects. */ private final RowProcessor convert; /** * The column index to retrieve key values from. Defaults to 1. */ private final int columnIndex; /** * The column name to retrieve key values from. Either columnName or * columnIndex will be used but never both. */ private final String columnName; /** * Creates a new instance of BeanMapHandler. The value of the first column * of each row will be a key in the Map. * * @param type * The Class that objects returned from createRow() * are created from. */ public BeanMapHandler(Class type) { this(type, ArrayHandler.ROW_PROCESSOR, 1, null); } /** * Creates a new instance of BeanMapHandler. The value of the first column * of each row will be a key in the Map. * * @param type * The Class that objects returned from createRow() * are created from. * @param convert * The RowProcessor implementation to use when * converting rows into Beans */ public BeanMapHandler(Class type, RowProcessor convert) { this(type, convert, 1, null); } /** * Creates a new instance of BeanMapHandler. * * @param type * The Class that objects returned from createRow() * are created from. * @param columnIndex * The values to use as keys in the Map are retrieved from the * column at this index. */ public BeanMapHandler(Class type, int columnIndex) { this(type, ArrayHandler.ROW_PROCESSOR, columnIndex, null); } /** * Creates a new instance of BeanMapHandler. * * @param type * The Class that objects returned from createRow() * are created from. * @param columnName * The values to use as keys in the Map are retrieved from the * column with this name. */ public BeanMapHandler(Class type, String columnName) { this(type, ArrayHandler.ROW_PROCESSOR, 1, columnName); } /** * Private Helper * * @param convert * The RowProcessor implementation to use when * converting rows into Beans * @param columnIndex * The values to use as keys in the Map are retrieved from the * column at this index. * @param columnName * The values to use as keys in the Map are retrieved from the * column with this name. */ private BeanMapHandler(Class type, RowProcessor convert, int columnIndex, String columnName) { super(); this.type = type; this.convert = convert; this.columnIndex = columnIndex; this.columnName = columnName; } /** * This factory method is called by handle() to retrieve the * key value from the current ResultSet row. * @param rs ResultSet to create a key from * * @return K from the configured key column name/index * * @throws SQLException if a database access error occurs * @throws ClassCastException if the class datatype does not match the column type * * @see org.apache.commons.dbutils.handlers.AbstractKeyedHandler#createKey(ResultSet) */ // We assume that the user has picked the correct type to match the column // so getObject will return the appropriate type and the cast will succeed. @SuppressWarnings("unchecked") @Override protected K createKey(ResultSet rs) throws SQLException { return (columnName == null) ? (K) rs.getObject(columnIndex) : (K) rs.getObject(columnName); } @Override protected V createRow(ResultSet rs) throws SQLException { return this.convert.toBean(rs, type); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy