Example usage for org.apache.ibatis.executor Executor NO_RESULT_HANDLER

List of usage examples for org.apache.ibatis.executor Executor NO_RESULT_HANDLER

Introduction

In this page you can find the example usage for org.apache.ibatis.executor Executor NO_RESULT_HANDLER.

Prototype

ResultHandler NO_RESULT_HANDLER

To view the source code for org.apache.ibatis.executor Executor NO_RESULT_HANDLER.

Click Source Link

Usage

From source file:com.sinotopia.mybatis.mapper.mapperhelper.SelectKeyGenerator.java

License:Apache License

private void processGeneratedKeys(Executor executor, MappedStatement ms, Object parameter) {
    try {/*from w  w w.  j  av a  2s  . co  m*/
        if (parameter != null && keyStatement != null && keyStatement.getKeyProperties() != null) {
            String[] keyProperties = keyStatement.getKeyProperties();
            final Configuration configuration = ms.getConfiguration();
            final MetaObject metaParam = configuration.newMetaObject(parameter);
            if (keyProperties != null) {
                // Do not close keyExecutor.
                // The transaction will be closed by parent executor.
                Executor keyExecutor = configuration.newExecutor(executor.getTransaction(),
                        ExecutorType.SIMPLE);
                List<Object> values = keyExecutor.query(keyStatement, parameter, RowBounds.DEFAULT,
                        Executor.NO_RESULT_HANDLER);
                if (values.size() == 0) {
                    throw new ExecutorException("SelectKey returned no data.");
                } else if (values.size() > 1) {
                    throw new ExecutorException("SelectKey returned more than one value.");
                } else {
                    MetaObject metaResult = configuration.newMetaObject(values.get(0));
                    if (keyProperties.length == 1) {
                        if (metaResult.hasGetter(keyProperties[0])) {
                            setValue(metaParam, keyProperties[0], metaResult.getValue(keyProperties[0]));
                        } else {
                            // no getter for the property - maybe just a single value object
                            // so try that
                            setValue(metaParam, keyProperties[0], values.get(0));
                        }
                    } else {
                        handleMultipleProperties(keyProperties, metaParam, metaResult);
                    }
                }
            }
        }
    } catch (ExecutorException e) {
        throw e;
    } catch (Exception e) {
        throw new ExecutorException("Error selecting key or setting result to parameter object. Cause: " + e,
                e);
    }
}