【MyBatis】原理四:MapperProxy执行业务方法

目录

1. mapperProxy调用业务方法,实则调用invoke

2. 进1的mapperMethod.execute

3. 进2的sqlSession.selectOne实则defaultSqlSession.selectOne

4. 进3的defaultSqlSession.selectList

5. 进4的configuration.getMappedStatement(statement)

6. 进4的executor.query

7. 进6的mappedStatement.getBoundSql

8. 进6的executor.query(... key, boundSql)

9. 进8的delegate.query(delegate为simpleExecutor)

10. 进9的baseExecutor.queryFromDatabase

11. 进10的simpleExecutor.doQuery

12. 进11的configuration.newStatementHandler

13. 进12的new RountingStatementHandler

14. 进13的new BaseStatementHandler

15. 进12的interceptorChain.pluginAll

16. 进11的simpleExecutor.prepareStatement

17. 进16的baseExecutor.getConnection(statementLog)

18. 进16的baseStatementHandler.prepare

19. 进16的routingStatementHandler.parameterize

20. 进19的prepareStatementHandler.parameterize

21. 进20的defaultParameterHandler.setParameters

22. 进11的rountingStatementHandler.query

23. 进22的preparedStatementHandler.query

24. 进23的resultSetHandler.handleResultSets

25. 进24的,层层跳转,最后跳到DefaultResultSetHandler的applyAutomaticMappings

26. 最后关闭资源,返回结果 



1. mapperProxy调用业务方法,实则调用invoke

    // method就是EmployeeMapper定义的抽象方法:
    // public abstract org.example.bean.Employee org.example.dao.EmployeeMapper.getEmpById(java.lang.Integer)
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        try {
            if (Object.class.equals(method.getDeclaringClass())) {
                return method.invoke(this, args);
            } else if (method.isDefault()) {
                // 默认方法是一个公共的非抽象实例方法,也就是说,在接口类型中声明的具有主体的非静态方法。
                if (privateLookupInMethod == null) {
                    return invokeDefaultMethodJava8(proxy, method, args);
                } else {
                    return invokeDefaultMethodJava9(proxy, method, args);
                }
            }
        } catch (Throwable t) {
            throw ExceptionUtil.unwrapThrowable(t);
        }
        // 将方法置于methodCache缓存中,
        // public abstract org.example.bean.Employee org.example.dao.EmployeeMapper.getEmpById(java.lang.Integer)
        // 然后返回一个MapperMethod对象,这个对象包含了command指令以及method方法的一些属性,
        // 比如指令名为org.example.dao.EmployeeMapper.getEmpById,指令类型为SELECT。
        // 方法returnsMap为false,returnType为class org.example.bean.Employee等
        final MapperMethod mapperMethod = cachedMapperMethod(method);
        // execute判断增删改查类型,包装参数
        return mapperMethod.execute(sqlSession, args);
    }

2. 进1的mapperMethod.execute

    // args还是我们输入的id值,Object[1],便于后面占位符赋值
    public Object execute(SqlSession sqlSession, Object[] args) {
        Object result;
        // 判断指令的类型,上面说了是SELECT
        switch (command.getType()) {
            case INSERT: {
                Object param = method.convertArgsToSqlCommandParam(args);

                result = rowCountResult(sqlSession.insert(command.getName(), param));
                break;
            }
            case UPDATE: {
                Object param = method.convertArgsToSqlCommandParam(args);
                result = rowCountResult(sqlSession.update(command.getName(), param));
                break;
            }
            case DELETE: {
                Object param = method.convertArgsToSqlCommandParam(args);
                result = rowCountResult(sqlSession.delete(command.getName(), param));
                break;
            }
            case SELECT:
                // 判断方法的一些属性
                if (method.returnsVoid() && method.hasResultHandler()) {
                    executeWithResultHandler(sqlSession, args);
                    result = null;
                } else if (method.returnsMany()) {
                    result = executeForMany(sqlSession, args);
                } else if (method.returnsMap()) {
                    result = executeForMap(sqlSession, args);
                } else if (method.returnsCursor()) {
                    result = executeForCursor(sqlSession, args);
                } else {
                    // 将参数都转化为能被sql占位符赋值的对象
                    Object param = method.convertArgsToSqlCommandParam(args);
                    // sqlSession.selectOne实际就调用DefaultSqlSession里的selectOne
                    // 指令名为org.example.dao.EmployeeMapper.getEmpById
                    result = sqlSession.selectOne(command.getName(), param);
                    if (method.returnsOptional()
                            && (result == null || !method.getReturnType().equals(result.getClass()))) {
                        result = Optional.ofNullable(result);
                    }
                }
                break;
            case FLUSH:
                result = sqlSession.flushStatements();
                break;
            default:
                throw new BindingException("Unknown execution method for: " + command.getName());
        }
        if (result == null && method.getReturnType().isPrimitive() && !method.returnsVoid()) {
            throw new BindingException("Mapper method '" + command.getName() 
        + " attempted to return null from a method with a primitive return type (" 
        + method.getReturnType() + ").");
        }
        return result;
    }

3. 进2的sqlSession.selectOne实则defaultSqlSession.selectOne

    @Override
    public <T> T selectOne(String statement, Object parameter) {
        // Popular vote was to return null on 0 results and throw exception on too many.
        List<T> list = this.selectList(statement, parameter);
        if (list.size() == 1) {
            return list.get(0);
        } else if (list.size() > 1) {
            throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + list.size());
        } else {
            return null;
        }
    }

4. 进3的defaultSqlSession.selectList

    // statement就是org.example.dao.EmployeeMapper.getEmpById
    @Override
    public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) {
        try {
            MappedStatement ms = configuration.getMappedStatement(statement);
            return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER);
        } catch (Exception e) {
            throw ExceptionFactory.wrapException("Error querying database.  Cause: " + e, e);
        } finally {
            ErrorContext.instance().reset();
        }
    }

5. 进4的configuration.getMappedStatement(statement)

    public MappedStatement getMappedStatement(String id, boolean validateIncompleteStatements) {
        if (validateIncompleteStatements) {
            // 从mapper配置文件获取所有的唯一标识的mappedStatement(包含了你配置的属性等),唯一标识也就是每个方法名
            // 比如deleteEmpById、org.example.dao.EmployeeMapper.getEmpByIdReturnMap等
            buildAllStatements();
        }
        // 这里就是根据方法名,得到mapper配置文件中对应的statement
        return mappedStatements.get(id);
    }

6. 进4的executor.query

看下执行器类

以CachingExecutor为例

    @Override
    public <E> List<E> query(MappedStatement ms, Object parameterObject
        , RowBounds rowBounds, ResultHandler resultHandler) throws SQLException {
        // 获取包含sql语句详细信息的BoundSql
        BoundSql boundSql = ms.getBoundSql(parameterObject);
        // 获取缓存的键,如-101660062:1751857674:org.example.dao.EmployeeMapper.getEmpById:0:2147483647:
        // select id,last_name,email,gender from employee where id = ?:1:development
        // 获取缓存的键cacheKey
        CacheKey key = createCacheKey(ms, parameterObject, rowBounds, boundSql);
        return query(ms, parameterObject, rowBounds, resultHandler, key, boundSql);
    }

7. 进6的mappedStatement.getBoundSql


    public BoundSql getBoundSql(Object parameterObject) {
        // 这里的BoundSql的sql就是select id,last_name,email,gender from employee where id = ?
        BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
        // ParameterMapping{property='id', mode=IN, javaType=class java.lang.Object
        // , jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}
        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
        if (parameterMappings == null || parameterMappings.isEmpty()) {
            boundSql = new BoundSql(configuration, boundSql.getSql()
                    , parameterMap.getParameterMappings(), parameterObject);
        }

        // 检查有没有参数映射中的嵌套结果映射ResultMap
        for (ParameterMapping pm : boundSql.getParameterMappings()) {
            String rmId = pm.getResultMapId();
            if (rmId != null) {
                ResultMap rm = configuration.getResultMap(rmId);
                if (rm != null) {
                    hasNestedResultMaps |= rm.hasNestedResultMaps();
                }
            }
        }

        return boundSql;
    }

8. 进6的executor.query(... key, boundSql)

    @Override
    public <E> List<E> query(MappedStatement ms, Object parameterObject, RowBounds rowBounds
            , ResultHandler resultHandler, CacheKey key, BoundSql boundSql)
            throws SQLException {
        Cache cache = ms.getCache();
        if (cache != null) {
            flushCacheIfRequired(ms);
            if (ms.isUseCache() && resultHandler == null) {
                ensureNoOutParams(ms, boundSql);
                @SuppressWarnings("unchecked")
                List<E> list = (List<E>) tcm.getObject(cache, key);
                if (list == null) {
                    list = delegate.query(ms, parameterObject, rowBounds, resultHandler, key, boundSql);
                    tcm.putObject(cache, key, list); // issue #578 and #116
                }
                return list;
            }
        }
        // delegate为SimpleExecutor
        return delegate.query(ms, parameterObject, rowBounds, resultHandler, key, boundSql);
    }

9. 进8的delegate.query(delegate为simpleExecutor)

这里是调用simpleExecutor的父类baseExecutor的query

    @Override
    public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds
      , ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {
        ErrorContext.instance().resource(ms.getResource()).activity("executing a query").object(ms.getId());
        if (closed) {
            throw new ExecutorException("Executor was closed.");
        }
        if (queryStack == 0 && ms.isFlushCacheRequired()) {
            clearLocalCache();
        }
        List<E> list;
        try {
            queryStack++;
            // 查询本地缓存有无数据,没有就调用queryFromDatabase,查出后也会保存到本地缓存
            list = resultHandler == null ? (List<E>) localCache.getObject(key) : null;
            if (list != null) {
                handleLocallyCachedOutputParameters(ms, key, parameter, boundSql);
            } else {
                list = queryFromDatabase(ms, parameter, rowBounds, resultHandler, key, boundSql);
            }
        } finally {
            queryStack--;
        }
        if (queryStack == 0) {
            for (BaseExecutor.DeferredLoad deferredLoad : deferredLoads) {
                deferredLoad.load();
            }
            // issue #601
            deferredLoads.clear();
            if (configuration.getLocalCacheScope() == LocalCacheScope.STATEMENT) {
                // issue #482
                clearLocalCache();
            }
        }
        return list;
    }

10. 进9的baseExecutor.queryFromDatabase

    private <E> List<E> queryFromDatabase(MappedStatement ms, Object parameter, RowBounds rowBounds
            , ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {
        List<E> list;

        localCache.putObject(key, EXECUTION_PLACEHOLDER);
        try {
            // 从数据库获取数据
            list = doQuery(ms, parameter, rowBounds, resultHandler, boundSql);
        } finally {
            localCache.removeObject(key);
        }
        // 将上面的缓存key存到本地缓存作键,结果作值
        localCache.putObject(key, list);
        if (ms.getStatementType() == StatementType.CALLABLE) {
            localOutputParameterCache.putObject(key, parameter);
        }
        return list;
    }

11. 进10的simpleExecutor.doQuery

    @Override
    public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
        Statement stmt = null;
        try {
            Configuration configuration = ms.getConfiguration();
            StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql);
            // SimpleExecutor的prepareStatement
            stmt = prepareStatement(handler, ms.getStatementLog());
            return handler.query(stmt, resultHandler);
        } finally {
            closeStatement(stmt);
        }
    }

12. 进11的configuration.newStatementHandler

    public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement
        , Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
        StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement
        , parameterObject, rowBounds, resultHandler, boundSql);
        // 让拦截器逐层按顺序包装
        statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler);
        return statementHandler;
    }

13. 进12的new RountingStatementHandler

  public RoutingStatementHandler(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds
    , ResultHandler resultHandler, BoundSql boundSql) {
    // 根据mappedStatement的statementType去创建SimpleStatementHandler
    // 或PreparedStatementHandler或CallableStatementHandler
    switch (ms.getStatementType()) {
      case STATEMENT:
        delegate = new SimpleStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
        break;
      case PREPARED:
        delegate = new PreparedStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
        break;
      case CALLABLE:
        delegate = new CallableStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
        break;
      default:
        throw new ExecutorException("Unknown statement type: " + ms.getStatementType());
    }

  }

14. 进13的new BaseStatementHandler

无论new SimpleStatementHandler还是其它,都会初始化为父类构造器

  protected BaseStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
    this.configuration = mappedStatement.getConfiguration();
    this.executor = executor;
    this.mappedStatement = mappedStatement;
    this.rowBounds = rowBounds;

    this.typeHandlerRegistry = configuration.getTypeHandlerRegistry();
    this.objectFactory = configuration.getObjectFactory();

    if (boundSql == null) { // issue #435, get the key before calculating the statement
      generateKeys(parameterObject);
      boundSql = mappedStatement.getBoundSql(parameterObject);
    }

    this.boundSql = boundSql;

    this.parameterHandler = configuration.newParameterHandler(mappedStatement, parameterObject, boundSql);
    this.resultSetHandler = configuration.newResultSetHandler(executor, mappedStatement, rowBounds, parameterHandler, resultHandler, boundSql);
  }

于是初始化顺序是,先生成ParamenterHandler,拦截器包装,再生成ResultSetHandler,拦截器包装,最后再生成SimpleStatementHandler或PreparedStatementHandler或CallableStatementHandler,再拦截器包装。

15. 进12的interceptorChain.pluginAll

注意每一次包装都是返回目标对象的一个代理对象

  public Object pluginAll(Object target) {
    // 逐层包装
    for (Interceptor interceptor : interceptors) {
      target = interceptor.plugin(target);
    }
    return target;
  }

16. 进11的simpleExecutor.prepareStatement

    private Statement prepareStatement(StatementHandler handler, Log statementLog) throws SQLException {
        Statement stmt;
        // 从事务中获取数据库连接对象(debug时是代理对象ConnectionLogger)
        Connection connection = getConnection(statementLog);
        // 将占位符识别预处理下,但还不是替换为参数值
        stmt = handler.prepare(connection, transaction.getTimeout());
        // 参数化,sql语句加上了参数
        handler.parameterize(stmt);
        return stmt;
    }

17. 进16的baseExecutor.getConnection(statementLog)

    protected Connection getConnection(Log statementLog) throws SQLException {
        // 从事务中获取数据库连接对象
        Connection connection = transaction.getConnection();
        if (statementLog.isDebugEnabled()) {
            // debug时是代理对象ConnectionLogger
            return ConnectionLogger.newInstance(connection, statementLog, queryStack);
        } else {
            return connection;
        }
    }

18. 进16的baseStatementHandler.prepare

    // 预编译sql产生PreparedStatement对象
    @Override
    public Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException {
        ErrorContext.instance().sql(boundSql.getSql());
        Statement statement = null;
        try {
            statement = instantiateStatement(connection);
            setStatementTimeout(statement, transactionTimeout);
            setFetchSize(statement);
            return statement;
        } catch (SQLException e) {
            closeStatement(statement);
            throw e;
        } catch (Exception e) {
            closeStatement(statement);
            throw new ExecutorException("Error preparing statement.  Cause: " + e, e);
        }
    }

19. 进16的routingStatementHandler.parameterize

    @Override
    public void parameterize(Statement statement) throws SQLException {
        delegate.parameterize(statement);
    }

20. 进19的prepareStatementHandler.parameterize

    @Override
    public void parameterize(Statement statement) throws SQLException {
        parameterHandler.setParameters((PreparedStatement) statement);
    }

21. 进20的defaultParameterHandler.setParameters

    // 设置参数
    @Override
    public void setParameters(PreparedStatement ps) {
        ErrorContext.instance().activity("setting parameters").object(mappedStatement.getParameterMap().getId());
        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
        if (parameterMappings != null) {
            for (int i = 0; i < parameterMappings.size(); i++) {
                ParameterMapping parameterMapping = parameterMappings.get(i);
                if (parameterMapping.getMode() != ParameterMode.OUT) {
                    Object value;
                    String propertyName = parameterMapping.getProperty();
                    if (boundSql.hasAdditionalParameter(propertyName)) { // issue #448 ask first for additional params
                        value = boundSql.getAdditionalParameter(propertyName);
                    } else if (parameterObject == null) {
                        value = null;
                    } else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
                        value = parameterObject;
                    } else {
                        MetaObject metaObject = configuration.newMetaObject(parameterObject);
                        value = metaObject.getValue(propertyName);
                    }
                    TypeHandler typeHandler = parameterMapping.getTypeHandler();
                    JdbcType jdbcType = parameterMapping.getJdbcType();
                    if (value == null && jdbcType == null) {
                        jdbcType = configuration.getJdbcTypeForNull();
                    }
                    try {
                        // 给sql预编译设置参数
                        typeHandler.setParameter(ps, i + 1, value, jdbcType);
                    } catch (TypeException | SQLException e) {
                        throw new TypeException("Could not set parameters for mapping: " + parameterMapping + ". Cause: " + e, e);
                    }
                }
            }
        }
    }

22. 进11的rountingStatementHandler.query

    @Override
    public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
        return delegate.query(statement, resultHandler);
    }

23. 进22的preparedStatementHandler.query

    @Override
    public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
        PreparedStatement ps = (PreparedStatement) statement;
        // 执行sql语句
        ps.execute();
        // 返回结果集数据
        return resultSetHandler.handleResultSets(ps);
    }

24. 进23的resultSetHandler.handleResultSets

// 使用ResultSetHandler处理结果,使用TypeHandler获取value值
    @Override
    public List<Object> handleResultSets(Statement stmt) throws SQLException {
        ErrorContext.instance().activity("handling results").object(mappedStatement.getId());

        final List<Object> multipleResults = new ArrayList<>();

        int resultSetCount = 0;
        ResultSetWrapper rsw = getFirstResultSet(stmt);

        List<ResultMap> resultMaps = mappedStatement.getResultMaps();
        int resultMapCount = resultMaps.size();
        validateResultMapsCount(rsw, resultMapCount);
        while (rsw != null && resultMapCount > resultSetCount) {
            ResultMap resultMap = resultMaps.get(resultSetCount);
            handleResultSet(rsw, resultMap, multipleResults, null);
            rsw = getNextResultSet(stmt);
            cleanUpAfterHandlingResultSet();
            resultSetCount++;
        }

        String[] resultSets = mappedStatement.getResultSets();
        if (resultSets != null) {
            while (rsw != null && resultSetCount < resultSets.length) {
                ResultMapping parentMapping = nextResultMaps.get(resultSets[resultSetCount]);
                if (parentMapping != null) {
                    String nestedResultMapId = parentMapping.getNestedResultMapId();
                    ResultMap resultMap = configuration.getResultMap(nestedResultMapId);
                    handleResultSet(rsw, resultMap, null, parentMapping);
                }
                rsw = getNextResultSet(stmt);
                cleanUpAfterHandlingResultSet();
                resultSetCount++;
            }
        }
    }

25. 进24的,层层跳转,最后跳到DefaultResultSetHandler的applyAutomaticMappings

private boolean applyAutomaticMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, String columnPrefix) throws SQLException {
    List<DefaultResultSetHandler.UnMappedColumnAutoMapping> autoMapping = createAutomaticMappings(rsw, resultMap, metaObject, columnPrefix);
    boolean foundValues = false;
    if (!autoMapping.isEmpty()) {
        for (DefaultResultSetHandler.UnMappedColumnAutoMapping mapping : autoMapping) {
            final Object value = mapping.typeHandler.getResult(rsw.getResultSet(), mapping.column);
            if (value != null) {
                foundValues = true;
            }
            if (value != null || (configuration.isCallSettersOnNulls() && !mapping.primitive)) {
                // gcode issue #377, call setter on nulls (value is not 'found')
                metaObject.setValue(mapping.property, value);
            }
        }
    }
    return foundValues;
}

可见,调用typeHandler.getResult获取value值

26. 最后关闭资源,返回结果 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
卷 文档 的文件夹 PATH 列表 卷序列号为 000C-BB91 E:. │ config.properties │ Dao.java │ GeneratorDemo.java │ hibernate.cfg.xml │ HibernateDaoImpl.java │ HibernateSessionFactory.java │ HibernateUtil.java │ JsonUtil.java │ list.txt │ log4j.properties │ messageResource_zh_CN.properties │ spring.xml │ struts.xml │ ├─28个java常用的工具类 │ │ Base64.java │ │ Base64DecodingException.java │ │ CConst.java │ │ CharTools.java │ │ ConfigHelper.java │ │ Counter.java │ │ CTool.java │ │ DateHandler.java │ │ DateUtil.java │ │ DealString.java │ │ DebugOut.java │ │ Dom4jHelper.java │ │ Escape.java │ │ ExecHelper.java │ │ FileHelper.java │ │ FileUploadUtil.java │ │ FileUtil.java │ │ ftp二进制与ascii传输方式区别.txt │ │ IPDeal.java │ │ Md5.java │ │ MD5Encrypt.java │ │ MyFileFilter.java │ │ PropsUtil.java │ │ RegExUtil.java │ │ SimpleConfig.java │ │ StringHelper.java │ │ ThumbnailGenerator.java │ │ TradePortalUtil.java │ │ UploadHelper.java │ │ │ └─LogUtil │ │ .classpath │ │ .project │ │ logutil-1.0.6.jar │ │ MANIFEST.MF │ │ │ ├─.settings │ │ org.eclipse.jdt.core.prefs │ │ │ └─src │ │ logging.properties │ │ │ └─com │ └─mine │ │ BigMap.java │ │ LogPack.java │ │ │ └─logging │ ConsoleHandler.java │ ErrorManager.java │ FileHandler.java │ Filter.java │ Formatter.java │ Handler.java │ Level.java │ Logging.java │ LoggingMXBean.java │ LoggingPermission.java │ LogManager.java │ LogRecord.java │ LogUtil.java │ LogUtil2.java │ MemoryHandler.java │ PropertiesFactory.java │ PropertiesMachining.java │ RemoteHandler.java │ Simple0Formatter.java │ Simple1Formatter.java │ Simple2Formatter.java │ Simple3Formatter.java │ SimpleFormatter.java │ SocketHandler.java │ StreamHandler.java │ Test.java │ XMLFormatter.java │ ├─Android快速开发不可或缺的11个辅助类 │ AppUtils.java │ DensityUtils.java │ HttpUtils.java │ KeyBoardUtils.java │ L.java │ NetUtils.java │ ScreenUtils.java │ SDCardUtils.java │ SPUtils.java │ T.java │ ToolFor9Ge.java │ ├─css │ bootstrap.css │ bootstrap.min.css │ component.css │ cylater.css │ global.css │ login.css │ reset.css │ ├─js │ │ avalon.js │ │ components.js │ │ cylater.min.js │ │ global.js │ │ jquery-1.7.1.min.js │ │ jquery-1.8.2.min.js │ │ jquery.cookie.js │ │ jquery.metadata.js │ │ jquery.min.js │ │ jquery.nicescroll.min.js │ │ jquery.validate.js │ │ jquery.validate.message_cn.js │ │ login.js │ │ md5.js │ │ mgTextWidth.js │ │ tinybox.js │ │ │ ├─bootstrap │ │ │ │ │ ├─css │ │ │ bootstrap-responsive.css │ │ │ bootstrap-responsive.min.css │ │ │ bootstrap.css │ │ │ bootstrap.min.css │ │ │ │ │ ├─img │ │ │ glyphicons-halflings-white.png │ │ │ glyphicons-halflings.png │ │ │ │ │ └─js │ │ bootstrap.js │ │ bootstrap.min.js │ │ │ ├─doubanAPI_Demo │ │ dbapi_beta1_20120316.js │ │ doubanapi.html │ │ jquery-1.4.2.js │ │ │ └─jQuery │ jquery-1.11.3.min.js │ jquery-1.7.2.js │ jquery-1.7.2.min.js │ ├─MyBatis-zh │ │ clirr-report.html │ │ configuration.html │ │ cpd.html │ │ cpd.xml │ │ dependencies.html │ │ dependency-info.html │ │ distribution-management.html │ │ dynamic-sql.html │ │ findbugs.html │ │ getting-started.html │ │ index.html │ │ integration.html │ │ issue-tracking.html │ │ java-api.html │ │ jdepend-report.html │ │ license.html │ │ logging.html │ │ mail-lists.html │ │ Mybatis.htm │ │ plugin-management.html │ │ plugins.html │ │ pmd.html │ │ pmd.xml │ │ project-info.html │ │ project-reports.html │ │ project-summary.html │ │ source-repository.html │ │ sqlmap-xml.html │ │ statement-builders.html │ │ surefire-report.html │ │ taglist.html │ │ team-list.html │ │ │ ├─apidocs │ │ index.html │ │ │ ├─cobertura │ │ │ coverage.xml │ │ │ frame-packages.html │ │ │ frame-sourcefiles-org.apache.ibatis.annotations.html │ │ │ frame-sourcefiles-org.apache.ibatis.binding.html │ │ │ frame-sourcefiles-org.apache.ibatis.builder.annotation.html │ │ │ frame-sourcefiles-org.apache.ibatis.builder.html │ │ │ frame-sourcefiles-org.apache.ibatis.builder.xml.html │ │ │ frame-sourcefiles-org.apache.ibatis.cache.decorators.html │ │ │ frame-sourcefiles-org.apache.ibatis.cache.html │ │ │ frame-sourcefiles-org.apache.ibatis.cache.impl.html │ │ │ frame-sourcefiles-org.apache.ibatis.datasource.html │ │ │ frame-sourcefiles-org.apache.ibatis.datasource.jndi.html │ │ │ frame-sourcefiles-org.apache.ibatis.datasource.pooled.html │ │ │ frame-sourcefiles-org.apache.ibatis.datasource.unpooled.html │ │ │ frame-sourcefiles-org.apache.ibatis.exceptions.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.keygen.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.loader.cglib.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.loader.html │ │ │ frame-sourcefiles- org.apache.ibatis.executor.loader.javassist.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.parameter.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.result.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.resultset.html │ │ │ frame-sourcefiles-org.apache.ibatis.executor.statement.html │ │ │ frame-sourcefiles-org.apache.ibatis.io.html │ │ │ frame-sourcefiles-org.apache.ibatis.jdbc.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.commons.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.jdbc.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.jdk14.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.log4j.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.log4j2.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.nologging.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.slf4j.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.stdout.html │ │ │ frame-sourcefiles-org.apache.ibatis.mapping.html │ │ │ frame-sourcefiles-org.apache.ibatis.metadata.html │ │ │ frame-sourcefiles-org.apache.ibatis.parsing.html │ │ │ frame-sourcefiles-org.apache.ibatis.plugin.html │ │ │ frame-sourcefiles-org.apache.ibatis.reflection.factory.html │ │ │ frame-sourcefiles-org.apache.ibatis.reflection.html │ │ │ frame-sourcefiles-org.apache.ibatis.reflection.invoker.html │ │ │ frame-sourcefiles-org.apache.ibatis.reflection.property.html │ │ │ frame-sourcefiles-org.apache.ibatis.reflection.wrapper.html │ │ │ frame-sourcefiles-org.apache.ibatis.scripting.defaults.html │ │ │ frame-sourcefiles-org.apache.ibatis.scripting.html │ │ │ frame-sourcefiles-org.apache.ibatis.scripting.xmltags.html │ │ │ frame-sourcefiles-org.apache.ibatis.session.defaults.html │ │ │ frame-sourcefiles-org.apache.ibatis.session.html │ │ │ frame-sourcefiles-org.apache.ibatis.transaction.html │ │ │ frame-sourcefiles-org.apache.ibatis.transaction.jdbc.html │ │ │ frame-sourcefiles-org.apache.ibatis.transaction.managed.html │ │ │ frame-sourcefiles-org.apache.ibatis.type.html │ │ │ frame-sourcefiles.html │ │ │ frame-summary-org.apache.ibatis.annotations.html │ │ │ frame-summary-org.apache.ibatis.binding.html │ │ │ frame-summary-org.apache.ibatis.builder.annotation.html │ │ │ frame-summary-org.apache.ibatis.builder.html │ │ │ frame-summary-org.apache.ibatis.builder.xml.html │ │ │ frame-summary-org.apache.ibatis.cache.decorators.html │ │ │ frame-summary-org.apache.ibatis.cache.html │ │ │ frame-summary-org.apache.ibatis.cache.impl.html │ │ │ frame-summary-org.apache.ibatis.datasource.html │ │ │ frame-summary-org.apache.ibatis.datasource.jndi.html │ │ │ frame-summary-org.apache.ibatis.datasource.pooled.html │ │ │ frame-summary-org.apache.ibatis.datasource.unpooled.html │ │ │ frame-summary-org.apache.ibatis.exceptions.html │ │ │ frame-summary-org.apache.ibatis.executor.html │ │ │ frame-summary-org.apache.ibatis.executor.keygen.html │ │ │ frame-summary-org.apache.ibatis.executor.loader.cglib.html │ │ │ frame-summary-org.apache.ibatis.executor.loader.html │ │ │ frame-summary-org.apache.ibatis.executor.loader.javassist.html │ │ │ frame-summary-org.apache.ibatis.executor.parameter.html │ │ │ frame-summary-org.apache.ibatis.executor.result.html │ │ │ frame-summary-org.apache.ibatis.executor.resultset.html │ │ │ frame-summary-org.apache.ibatis.executor.statement.html │ │ │ frame-summary-org.apache.ibatis.io.html │ │ │ frame-summary-org.apache.ibatis.jdbc.html │ │ │ frame-summary-org.apache.ibatis.logging.commons.html │ │ │ frame-summary-org.apache.ibatis.logging.html │ │ │ frame-summary-org.apache.ibatis.logging.jdbc.html │ │ │ frame-summary-org.apache.ibatis.logging.jdk14.html │ │ │ frame-summary-org.apache.ibatis.logging.log4j.html │ │ │ frame-summary-org.apache.ibatis.logging.log4j2.html │ │ │ frame-summary-org.apache.ibatis.logging.nologging.html │ │ │ frame-summary-org.apache.ibatis.logging.slf4j.html │ │ │ frame-summary-org.apache.ibatis.logging.stdout.html │ │ │ frame-summary-org.apache.ibatis.mapping.html │ │ │ frame-summary-org.apache.ibatis.metadata.html │ │ │ frame-summary-org.apache.ibatis.parsing.html │ │ │ frame-summary-org.apache.ibatis.plugin.html │ │ │ frame-summary-org.apache.ibatis.reflection.factory.html │ │ │ frame-summary-org.apache.ibatis.reflection.html │ │ │ frame-summary-org.apache.ibatis.reflection.invoker.html │ │ │ frame-summary-org.apache.ibatis.reflection.property.html │ │ │ frame-summary-org.apache.ibatis.reflection.wrapper.html │ │ │ frame-summary-org.apache.ibatis.scripting.defaults.html │ │ │ frame-summary-org.apache.ibatis.scripting.html │ │ │ frame-summary-org.apache.ibatis.scripting.xmltags.html │ │ │ frame-summary-org.apache.ibatis.session.defaults.html │ │ │ frame-summary-org.apache.ibatis.session.html │ │ │ frame-summary-org.apache.ibatis.transaction.html │ │ │ frame-summary-org.apache.ibatis.transaction.jdbc.html │ │ │ frame-summary-org.apache.ibatis.transaction.managed.html │ │ │ frame-summary-org.apache.ibatis.type.html │ │ │ frame-summary.html │ │ │ help.html │ │ │ index.html │ │ │ org.apache.ibatis.annotations.Arg.html │ │ │ org.apache.ibatis.annotations.CacheNamespace.html │ │ │ org.apache.ibatis.annotations.CacheNamespaceRef.html │ │ │ org.apache.ibatis.annotations.Case.html │ │ │ org.apache.ibatis.annotations.ConstructorArgs.html │ │ │ org.apache.ibatis.annotations.Delete.html │ │ │ org.apache.ibatis.annotations.DeleteProvider.html │ │ │ org.apache.ibatis.annotations.Insert.html │ │ │ org.apache.ibatis.annotations.InsertProvider.html │ │ │ org.apache.ibatis.annotations.Lang.html │ │ │ org.apache.ibatis.annotations.Many.html │ │ │ org.apache.ibatis.annotations.MapKey.html │ │ │ org.apache.ibatis.annotations.One.html │ │ │ org.apache.ibatis.annotations.Options.html │ │ │ org.apache.ibatis.annotations.Param.html │ │ │ org.apache.ibatis.annotations.Result.html │ │ │ org.apache.ibatis.annotations.ResultMap.html │ │ │ org.apache.ibatis.annotations.Results.html │ │ │ org.apache.ibatis.annotations.ResultType.html │ │ │ org.apache.ibatis.annotations.Select.html │ │ │ org.apache.ibatis.annotations.SelectKey.html │ │ │ org.apache.ibatis.annotations.SelectProvider.html │ │ │ org.apache.ibatis.annotations.TypeDiscriminator.html │ │ │ org.apache.ibatis.annotations.Update.html │ │ │ org.apache.ibatis.annotations.UpdateProvider.html │ │ │ org.apache.ibatis.binding.BindingException.html │ │ │ org.apache.ibatis.binding.MapperMethod.html │ │ │ org.apache.ibatis.binding.MapperProxy.html │ │ │ org.apache.ibatis.binding.MapperProxyFactory.html │ │ │ org.apache.ibatis.binding.MapperRegistry.html │ │ │ org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.html │ │ │ org.apache.ibatis.builder.annotation.MethodResolver.html │ │ │ org.apache.ibatis.builder.annotation.ProviderSqlSource.html │ │ │ org.apache.ibatis.builder.BaseBuilder.html │ │ │ org.apache.ibatis.builder.BuilderException.html │ │ │ org.apache.ibatis.builder.CacheRefResolver.html │ │ │ org.apache.ibatis.builder.IncompleteElementException.html │ │ │ org.apache.ibatis.builder.MapperBuilderAssistant.html │ │ │ org.apache.ibatis.builder.ParameterExpression.html │ │ │ org.apache.ibatis.builder.ResultMapResolver.html │ │ │ org.apache.ibatis.builder.SqlSourceBuilder.html │ │ │ org.apache.ibatis.builder.StaticSqlSource.html │ │ │ org.apache.ibatis.builder.xml.XMLConfigBuilder.html │ │ │ org.apache.ibatis.builder.xml.XMLIncludeTransformer.html │ │ │ org.apache.ibatis.builder.xml.XMLMapperBuilder.html │ │ │ org.apache.ibatis.builder.xml.XMLMapperEntityResolver.html │ │ │ org.apache.ibatis.builder.xml.XMLStatementBuilder.html │ │ │ org.apache.ibatis.cache.Cache.html │ │ │ org.apache.ibatis.cache.CacheException.html │ │ │ org.apache.ibatis.cache.CacheKey.html │ │ │ org.apache.ibatis.cache.decorators.FifoCache.html │ │ │ org.apache.ibatis.cache.decorators.LoggingCache.html │ │ │ org.apache.ibatis.cache.decorators.LruCache.html │ │ │ org.apache.ibatis.cache.decorators.ScheduledCache.html │ │ │ org.apache.ibatis.cache.decorators.SerializedCache.html │ │ │ org.apache.ibatis.cache.decorators.SoftCache.html │ │ │ org.apache.ibatis.cache.decorators.SynchronizedCache.html │ │ │ org.apache.ibatis.cache.decorators.TransactionalCache.html │ │ │ org.apache.ibatis.cache.decorators.WeakCache.html │ │ │ org.apache.ibatis.cache.impl.PerpetualCache.html │ │ │ org.apache.ibatis.cache.NullCacheKey.html │ │ │ org.apache.ibatis.cache.TransactionalCacheManager.html │ │ │ org.apache.ibatis.datasource.DataSourceException.html │ │ │ org.apache.ibatis.datasource.DataSourceFactory.html │ │ │ org.apache.ibatis.datasource.jndi.JndiDataSourceFactory.html │ │ │ org.apache.ibatis.datasource.pooled.PooledConnection.html │ │ │ org.apache.ibatis.datasource.pooled.PooledDataSource.html │ │ │ org.apache.ibatis.datasource.pooled.PooledDataSourceFactory.html │ │ │ org.apache.ibatis.datasource.pooled.PoolState.html │ │ │ org.apache.ibatis.datasource.unpooled.UnpooledDataSource.html │ │ │ org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory.html │ │ │ org.apache.ibatis.exceptions.ExceptionFactory.html │ │ │ org.apache.ibatis.exceptions.IbatisException.html │ │ │ org.apache.ibatis.exceptions.PersistenceException.html │ │ │ org.apache.ibatis.exceptions.TooManyResultsException.html │ │ │ org.apache.ibatis.executor.BaseExecutor.html │ │ │ org.apache.ibatis.executor.BatchExecutor.html │ │ │ org.apache.ibatis.executor.BatchExecutorException.html │ │ │ org.apache.ibatis.executor.BatchResult.html │ │ │ org.apache.ibatis.executor.CachingExecutor.html │ │ │ org.apache.ibatis.executor.ErrorContext.html │ │ │ org.apache.ibatis.executor.ExecutionPlaceholder.html │ │ │ org.apache.ibatis.executor.Executor.html │ │ │ org.apache.ibatis.executor.ExecutorException.html │ │ │ org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.html │ │ │ org.apache.ibatis.executor.keygen.KeyGenerator.html │ │ │ org.apache.ibatis.executor.keygen.NoKeyGenerator.html │ │ │ org.apache.ibatis.executor.keygen.SelectKeyGenerator.html │ │ │ org.apache.ibatis.executor.loader.AbstractEnhancedDeserializationProxy.html │ │ │ org.apache.ibatis.executor.loader.AbstractSerialStateHolder.html │ │ │ org.apache.ibatis.executor.loader.cglib.CglibProxyFactory.html │ │ │ org.apache.ibatis.executor.loader.cglib.CglibSerialStateHolder.html │ │ │ org.apache.ibatis.executor.loader.CglibProxyFactory.html │ │ │ org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory.html │ │ │ org.apache.ibatis.executor.loader.javassist.JavassistSerialStateHolder.html │ │ │ org.apache.ibatis.executor.loader.JavassistProxyFactory.html │ │ │ org.apache.ibatis.executor.loader.ProxyFactory.html │ │ │ org.apache.ibatis.executor.loader.ResultLoader.html │ │ │ org.apache.ibatis.executor.loader.ResultLoaderMap.html │ │ │ org.apache.ibatis.executor.loader.WriteReplaceInterface.html │ │ │ org.apache.ibatis.executor.parameter.ParameterHandler.html │ │ │ org.apache.ibatis.executor.result.DefaultMapResultHandler.html │ │ │ org.apache.ibatis.executor.result.DefaultResultContext.html │ │ │ org.apache.ibatis.executor.result.DefaultResultHandler.html │ │ │ org.apache.ibatis.executor.ResultExtractor.html │ │ │ org.apache.ibatis.executor.resultset.DefaultResultSetHandler.html │ │ │ org.apache.ibatis.executor.resultset.ResultSetHandler.html │ │ │ org.apache.ibatis.executor.resultset.ResultSetWrapper.html │ │ │ org.apache.ibatis.executor.ReuseExecutor.html │ │ │ org.apache.ibatis.executor.SimpleExecutor.html │ │ │ org.apache.ibatis.executor.statement.BaseStatementHandler.html │ │ │ org.apache.ibatis.executor.statement.CallableStatementHandler.html │ │ │ org.apache.ibatis.executor.statement.PreparedStatementHandler.html │ │ │ org.apache.ibatis.executor.statement.RoutingStatementHandler.html │ │ │ org.apache.ibatis.executor.statement.SimpleStatementHandler.html │ │ │ org.apache.ibatis.executor.statement.StatementHandler.html │ │ │ org.apache.ibatis.io.ClassLoaderWrapper.html │ │ │ org.apache.ibatis.io.DefaultVFS.html │ │ │ org.apache.ibatis.io.ExternalResources.html │ │ │ org.apache.ibatis.io.JBoss6VFS.html │ │ │ org.apache.ibatis.io.ResolverUtil.html │ │ │ org.apache.ibatis.io.Resources.html │ │ │ org.apache.ibatis.io.VFS.html │ │ │ org.apache.ibatis.jdbc.AbstractSQL.html │ │ │ org.apache.ibatis.jdbc.Null.html │ │ │ org.apache.ibatis.jdbc.RuntimeSqlException.html │ │ │ org.apache.ibatis.jdbc.ScriptRunner.html │ │ │ org.apache.ibatis.jdbc.SelectBuilder.html │ │ │ org.apache.ibatis.jdbc.SQL.html │ │ │ org.apache.ibatis.jdbc.SqlBuilder.html │ │ │ org.apache.ibatis.jdbc.SqlRunner.html │ │ │ org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl.html │ │ │ org.apache.ibatis.logging.jdbc.BaseJdbcLogger.html │ │ │ org.apache.ibatis.logging.jdbc.ConnectionLogger.html │ │ │ org.apache.ibatis.logging.jdbc.PreparedStatementLogger.html │ │ │ org.apache.ibatis.logging.jdbc.ResultSetLogger.html │ │ │ org.apache.ibatis.logging.jdbc.StatementLogger.html │ │ │ org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl.html │ │ │ org.apache.ibatis.logging.Log.html │ │ │ org.apache.ibatis.logging.log4j.Log4jImpl.html │ │ │ org.apache.ibatis.logging.log4j2.Log4j2AbstractLoggerImpl.html │ │ │ org.apache.ibatis.logging.log4j2.Log4j2Impl.html │ │ │ org.apache.ibatis.logging.log4j2.Log4j2LoggerImpl.html │ │ │ org.apache.ibatis.logging.LogException.html │ │ │ org.apache.ibatis.logging.LogFactory.html │ │ │ org.apache.ibatis.logging.nologging.NoLoggingImpl.html │ │ │ org.apache.ibatis.logging.slf4j.Slf4jImpl.html │ │ │ org.apache.ibatis.logging.slf4j.Slf4jLocationAwareLoggerImpl.html │ │ │ org.apache.ibatis.logging.slf4j.Slf4jLoggerImpl.html │ │ │ org.apache.ibatis.logging.stdout.StdOutImpl.html │ │ │ org.apache.ibatis.mapping.BoundSql.html │ │ │ org.apache.ibatis.mapping.CacheBuilder.html │ │ │ org.apache.ibatis.mapping.DatabaseIdProvider.html │ │ │ org.apache.ibatis.mapping.DefaultDatabaseIdProvider.html │ │ │ org.apache.ibatis.mapping.Discriminator.html │ │ │ org.apache.ibatis.mapping.Environment.html │ │ │ org.apache.ibatis.mapping.MappedStatement.html │ │ │ org.apache.ibatis.mapping.ParameterMap.html │ │ │ org.apache.ibatis.mapping.ParameterMapping.html │ │ │ org.apache.ibatis.mapping.ParameterMode.html │ │ │ org.apache.ibatis.mapping.ResultFlag.html │ │ │ org.apache.ibatis.mapping.ResultMap.html │ │ │ org.apache.ibatis.mapping.ResultMapping.html │ │ │ org.apache.ibatis.mapping.ResultSetType.html │ │ │ org.apache.ibatis.mapping.SqlCommandType.html │ │ │ org.apache.ibatis.mapping.SqlSource.html │ │ │ org.apache.ibatis.mapping.StatementType.html │ │ │ org.apache.ibatis.mapping.VendorDatabaseIdProvider.html │ │ │ org.apache.ibatis.metadata.Column.html │ │ │ org.apache.ibatis.metadata.Database.html │ │ │ org.apache.ibatis.metadata.DatabaseFactory.html │ │ │ org.apache.ibatis.metadata.Table.html │ │ │ org.apache.ibatis.parsing.GenericTokenParser.html │ │ │ org.apache.ibatis.parsing.ParsingException.html │ │ │ org.apache.ibatis.parsing.PropertyParser.html │ │ │ org.apache.ibatis.parsing.TokenHandler.html │ │ │ org.apache.ibatis.parsing.XNode.html │ │ │ org.apache.ibatis.parsing.XPathParser.html │ │ │ org.apache.ibatis.plugin.Interceptor.html │ │ │ org.apache.ibatis.plugin.InterceptorChain.html │ │ │ org.apache.ibatis.plugin.Intercepts.html │ │ │ org.apache.ibatis.plugin.Invocation.html │ │ │ org.apache.ibatis.plugin.Plugin.html │ │ │ org.apache.ibatis.plugin.PluginException.html │ │ │ org.apache.ibatis.plugin.Signature.html │ │ │ org.apache.ibatis.reflection.ExceptionUtil.html │ │ │ org.apache.ibatis.reflection.factory.DefaultObjectFactory.html │ │ │ org.apache.ibatis.reflection.factory.ObjectFactory.html │ │ │ org.apache.ibatis.reflection.invoker.GetFieldInvoker.html │ │ │ org.apache.ibatis.reflection.invoker.Invoker.html │ │ │ org.apache.ibatis.reflection.invoker.MethodInvoker.html │ │ │ org.apache.ibatis.reflection.invoker.SetFieldInvoker.html │ │ │ org.apache.ibatis.reflection.MetaClass.html │ │ │ org.apache.ibatis.reflection.MetaObject.html │ │ │ org.apache.ibatis.reflection.property.PropertyCopier.html │ │ │ org.apache.ibatis.reflection.property.PropertyNamer.html │ │ │ org.apache.ibatis.reflection.property.PropertyTokenizer.html │ │ │ org.apache.ibatis.reflection.ReflectionException.html │ │ │ org.apache.ibatis.reflection.Reflector.html │ │ │ org.apache.ibatis.reflection.SystemMetaObject.html │ │ │ org.apache.ibatis.reflection.wrapper.BaseWrapper.html │ │ │ org.apache.ibatis.reflection.wrapper.BeanWrapper.html │ │ │ org.apache.ibatis.reflection.wrapper.CollectionWrapper.html │ │ │ org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory.html │ │ │ org.apache.ibatis.reflection.wrapper.MapWrapper.html │ │ │ org.apache.ibatis.reflection.wrapper.ObjectWrapper.html │ │ │ org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory.html │ │ │ org.apache.ibatis.scripting.defaults.DefaultParameterHandler.html │ │ │ org.apache.ibatis.scripting.defaults.RawLanguageDriver.html │ │ │ org.apache.ibatis.scripting.defaults.RawSqlSource.html │ │ │ org.apache.ibatis.scripting.LanguageDriver.html │ │ │ org.apache.ibatis.scripting.LanguageDriverRegistry.html │ │ │ org.apache.ibatis.scripting.ScriptingException.html │ │ │ org.apache.ibatis.scripting.xmltags.ChooseSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.DynamicContext.html │ │ │ org.apache.ibatis.scripting.xmltags.DynamicSqlSource.html │ │ │ org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.html │ │ │ org.apache.ibatis.scripting.xmltags.ForEachSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.IfSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.MixedSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.OgnlCache.html │ │ │ org.apache.ibatis.scripting.xmltags.SetSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.SqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.TextSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.TrimSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.VarDeclSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.WhereSqlNode.html │ │ │ org.apache.ibatis.scripting.xmltags.XMLLanguageDriver.html │ │ │ org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.html │ │ │ org.apache.ibatis.session.AutoMappingBehavior.html │ │ │ org.apache.ibatis.session.Configuration.html │ │ │ org.apache.ibatis.session.defaults.DefaultSqlSession.html │ │ │ org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.html │ │ │ org.apache.ibatis.session.ExecutorType.html │ │ │ org.apache.ibatis.session.LocalCacheScope.html │ │ │ org.apache.ibatis.session.ResultContext.html │ │ │ org.apache.ibatis.session.ResultHandler.html │ │ │ org.apache.ibatis.session.RowBounds.html │ │ │ org.apache.ibatis.session.SqlSession.html │ │ │ org.apache.ibatis.session.SqlSessionException.html │ │ │ org.apache.ibatis.session.SqlSessionFactory.html │ │ │ org.apache.ibatis.session.SqlSessionFactoryBuilder.html │ │ │ org.apache.ibatis.session.SqlSessionManager.html │ │ │ org.apache.ibatis.session.TransactionIsolationLevel.html │ │ │ org.apache.ibatis.transaction.jdbc.JdbcTransaction.html │ │ │ org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory.html │ │ │ org.apache.ibatis.transaction.managed.ManagedTransaction.html │ │ │ org.apache.ibatis.transaction.managed.ManagedTransactionFactory.html │ │ │ org.apache.ibatis.transaction.Transaction.html │ │ │ org.apache.ibatis.transaction.TransactionException.html │ │ │ org.apache.ibatis.transaction.TransactionFactory.html │ │ │ org.apache.ibatis.type.Alias.html │ │ │ org.apache.ibatis.type.ArrayTypeHandler.html │ │ │ org.apache.ibatis.type.BaseTypeHandler.html │ │ │ org.apache.ibatis.type.BigDecimalTypeHandler.html │ │ │ org.apache.ibatis.type.BigIntegerTypeHandler.html │ │ │ org.apache.ibatis.type.BlobByteObjectArrayTypeHandler.html │ │ │ org.apache.ibatis.type.BlobTypeHandler.html │ │ │ org.apache.ibatis.type.BooleanTypeHandler.html │ │ │ org.apache.ibatis.type.ByteArrayTypeHandler.html │ │ │ org.apache.ibatis.type.ByteArrayUtils.html │ │ │ org.apache.ibatis.type.ByteObjectArrayTypeHandler.html │ │ │ org.apache.ibatis.type.ByteTypeHandler.html │ │ │ org.apache.ibatis.type.CharacterTypeHandler.html │ │ │ org.apache.ibatis.type.ClobTypeHandler.html │ │ │ org.apache.ibatis.type.DateOnlyTypeHandler.html │ │ │ org.apache.ibatis.type.DateTypeHandler.html │ │ │ org.apache.ibatis.type.DoubleTypeHandler.html │ │ │ org.apache.ibatis.type.EnumOrdinalTypeHandler.html │ │ │ org.apache.ibatis.type.EnumTypeHandler.html │ │ │ org.apache.ibatis.type.FloatTypeHandler.html │ │ │ org.apache.ibatis.type.IntegerTypeHandler.html │ │ │ org.apache.ibatis.type.JdbcType.html │ │ │ org.apache.ibatis.type.LongTypeHandler.html │ │ │ org.apache.ibatis.type.MappedJdbcTypes.html │ │ │ org.apache.ibatis.type.MappedTypes.html │ │ │ org.apache.ibatis.type.NClobTypeHandler.html │ │ │ org.apache.ibatis.type.NStringTypeHandler.html │ │ │ org.apache.ibatis.type.ObjectTypeHandler.html │ │ │ org.apache.ibatis.type.ShortTypeHandler.html │ │ │ org.apache.ibatis.type.SimpleTypeRegistry.html │ │ │ org.apache.ibatis.type.SqlDateTypeHandler.html │ │ │ org.apache.ibatis.type.SqlTimestampTypeHandler.html │ │ │ org.apache.ibatis.type.SqlTimeTypeHandler.html │ │ │ org.apache.ibatis.type.StringTypeHandler.html │ │ │ org.apache.ibatis.type.TimeOnlyTypeHandler.html │ │ │ org.apache.ibatis.type.TypeAliasRegistry.html │ │ │ org.apache.ibatis.type.TypeException.html │ │ │ org.apache.ibatis.type.TypeHandler.html │ │ │ org.apache.ibatis.type.TypeHandlerRegistry.html │ │ │ org.apache.ibatis.type.TypeReference.html │ │ │ org.apache.ibatis.type.UnknownTypeHandler.html │ │ │ │ │ ├─css │ │ │ help.css │ │ │ main.css │ │ │ sortabletable.css │ │ │ source-viewer.css │ │ │ tooltip.css │ │ │ │ │ ├─images │ │ └─js │ │ customsorttypes.js │ │ popup.js │ │ sortabletable.js │ │ stringbuilder.js │ │ │ ├─css │ │ apache-maven-fluido-1.3.0.min.css │ │ print.css │ │ site.css │ │ │ ├─images │ │ ├─logos │ │ └─profiles │ ├─img │ ├─js │ │ apache-maven-fluido-1.3.0.min.js │ │ │ ├─xref │ │ │ allclasses-frame.html │ │ │ index.html │ │ │ overview-frame.html │ │ │ overview-summary.html │ │ │ stylesheet.css │ │ │ │ │ └─org │ │ └─apache │ │ └─ibatis │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ │ │ ├─annotations │ │ │ Arg.html │ │ │ CacheNamespace.html │ │ │ CacheNamespaceRef.html │ │ │ Case.html │ │ │ ConstructorArgs.html │ │ │ Delete.html │ │ │ DeleteProvider.html │ │ │ Insert.html │ │ │ InsertProvider.html │ │ │ Lang.html │ │ │ Many.html │ │ │ MapKey.html │ │ │ One.html │ │ │ Options.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ Param.html │ │ │ Result.html │ │ │ ResultMap.html │ │ │ Results.html │ │ │ ResultType.html │ │ │ Select.html │ │ │ SelectKey.html │ │ │ SelectProvider.html │ │ │ TypeDiscriminator.html │ │ │ Update.html │ │ │ UpdateProvider.html │ │ │ │ │ ├─binding │ │ │ BindingException.html │ │ │ MapperMethod.html │ │ │ MapperProxy.html │ │ │ MapperProxyFactory.html │ │ │ MapperRegistry.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ │ │ ├─builder │ │ │ │ BaseBuilder.html │ │ │ │ BuilderException.html │ │ │ │ CacheRefResolver.html │ │ │ │ IncompleteElementException.html │ │ │ │ MapperBuilderAssistant.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ParameterExpression.html │ │ │ │ ResultMapResolver.html │ │ │ │ SqlSourceBuilder.html │ │ │ │ StaticSqlSource.html │ │ │ │ │ │ │ ├─annotation │ │ │ │ MapperAnnotationBuilder.html │ │ │ │ MethodResolver.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ProviderSqlSource.html │ │ │ │ │ │ │ └─xml │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ XMLConfigBuilder.html │ │ │ XMLIncludeTransformer.html │ │ │ XMLMapperBuilder.html │ │ │ XMLMapperEntityResolver.html │ │ │ XMLStatementBuilder.html │ │ │ │ │ ├─cache │ │ │ │ Cache.html │ │ │ │ CacheException.html │ │ │ │ CacheKey.html │ │ │ │ NullCacheKey.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ TransactionalCacheManager.html │ │ │ │ │ │ │ ├─decorators │ │ │ │ FifoCache.html │ │ │ │ LoggingCache.html │ │ │ │ LruCache.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ScheduledCache.html │ │ │ │ SerializedCache.html │ │ │ │ SoftCache.html │ │ │ │ SynchronizedCache.html │ │ │ │ TransactionalCache.html │ │ │ │ WeakCache.html │ │ │ │ │ │ │ └─impl │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ PerpetualCache.html │ │ │ │ │ ├─datasource │ │ │ │ DataSourceException.html │ │ │ │ DataSourceFactory.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─jndi │ │ │ │ JndiDataSourceFactory.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─pooled │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ PooledConnection.html │ │ │ │ PooledDataSource.html │ │ │ │ PooledDataSourceFactory.html │ │ │ │ PoolState.html │ │ │ │ │ │ │ └─unpooled │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ UnpooledDataSource.html │ │ │ UnpooledDataSourceFactory.html │ │ │ │ │ ├─exceptions │ │ │ ExceptionFactory.html │ │ │ IbatisException.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ PersistenceException.html │ │ │ TooManyResultsException.html │ │ │ │ │ ├─executor │ │ │ │ BaseExecutor.html │ │ │ │ BatchExecutor.html │ │ │ │ BatchExecutorException.html │ │ │ │ BatchResult.html │ │ │ │ CachingExecutor.html │ │ │ │ ErrorContext.html │ │ │ │ ExecutionPlaceholder.html │ │ │ │ Executor.html │ │ │ │ ExecutorException.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ResultExtractor.html │ │ │ │ ReuseExecutor.html │ │ │ │ SimpleExecutor.html │ │ │ │ │ │ │ ├─keygen │ │ │ │ Jdbc3KeyGenerator.html │ │ │ │ KeyGenerator.html │ │ │ │ NoKeyGenerator.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ SelectKeyGenerator.html │ │ │ │ │ │ │ ├─loader │ │ │ │ │ AbstractEnhancedDeserializationProxy.html │ │ │ │ │ AbstractSerialStateHolder.html │ │ │ │ │ CglibProxyFactory.html │ │ │ │ │ JavassistProxyFactory.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ ProxyFactory.html │ │ │ │ │ ResultLoader.html │ │ │ │ │ ResultLoaderMap.html │ │ │ │ │ WriteReplaceInterface.html │ │ │ │ │ │ │ │ │ ├─cglib │ │ │ │ │ CglibProxyFactory.html │ │ │ │ │ CglibSerialStateHolder.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ │ │ │ │ └─javassist │ │ │ │ JavassistProxyFactory.html │ │ │ │ JavassistSerialStateHolder.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─parameter │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ParameterHandler.html │ │ │ │ │ │ │ ├─result │ │ │ │ DefaultMapResultHandler.html │ │ │ │ DefaultResultContext.html │ │ │ │ DefaultResultHandler.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─resultset │ │ │ │ DefaultResultSetHandler.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ResultSetHandler.html │ │ │ │ ResultSetWrapper.html │ │ │ │ │ │ │ └─statement │ │ │ BaseStatementHandler.html │ │ │ CallableStatementHandler.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ PreparedStatementHandler.html │ │ │ RoutingStatementHandler.html │ │ │ SimpleStatementHandler.html │ │ │ StatementHandler.html │ │ │ │ │ ├─io │ │ │ ClassLoaderWrapper.html │ │ │ DefaultVFS.html │ │ │ ExternalResources.html │ │ │ JBoss6VFS.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ ResolverUtil.html │ │ │ Resources.html │ │ │ VFS.html │ │ │ │ │ ├─jdbc │ │ │ AbstractSQL.html │ │ │ Null.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ RuntimeSqlException.html │ │ │ ScriptRunner.html │ │ │ SelectBuilder.html │ │ │ SQL.html │ │ │ SqlBuilder.html │ │ │ SqlRunner.html │ │ │ │ │ ├─logging │ │ │ │ Log.html │ │ │ │ LogException.html │ │ │ │ LogFactory.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─commons │ │ │ │ JakartaCommonsLoggingImpl.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─jdbc │ │ │ │ BaseJdbcLogger.html │ │ │ │ ConnectionLogger.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ PreparedStatementLogger.html │ │ │ │ ResultSetLogger.html │ │ │ │ StatementLogger.html │ │ │ │ │ │ │ ├─jdk14 │ │ │ │ Jdk14LoggingImpl.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─log4j │ │ │ │ Log4jImpl.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─log4j2 │ │ │ │ Log4j2AbstractLoggerImpl.html │ │ │ │ Log4j2Impl.html │ │ │ │ Log4j2LoggerImpl.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─nologging │ │ │ │ NoLoggingImpl.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─slf4j │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ Slf4jImpl.html │ │ │ │ Slf4jLocationAwareLoggerImpl.html │ │ │ │ Slf4jLoggerImpl.html │ │ │ │ │ │ │ └─stdout │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ StdOutImpl.html │ │ │ │ │ ├─mapping │ │ │ BoundSql.html │ │ │ CacheBuilder.html │ │ │ DatabaseIdProvider.html │ │ │ DefaultDatabaseIdProvider.html │ │ │ Discriminator.html │ │ │ Environment.html │ │ │ MappedStatement.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ ParameterMap.html │ │ │ ParameterMapping.html │ │ │ ParameterMode.html │ │ │ ResultFlag.html │ │ │ ResultMap.html │ │ │ ResultMapping.html │ │ │ ResultSetType.html │ │ │ SqlCommandType.html │ │ │ SqlSource.html │ │ │ StatementType.html │ │ │ VendorDatabaseIdProvider.html │ │ │ │ │ ├─metadata │ │ │ Column.html │ │ │ Database.html │ │ │ DatabaseFactory.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ Table.html │ │ │ │ │ ├─parsing │ │ │ GenericTokenParser.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ ParsingException.html │ │ │ PropertyParser.html │ │ │ TokenHandler.html │ │ │ XNode.html │ │ │ XPathParser.html │ │ │ │ │ ├─plugin │ │ │ Interceptor.html │ │ │ InterceptorChain.html │ │ │ Intercepts.html │ │ │ Invocation.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ Plugin.html │ │ │ PluginException.html │ │ │ Signature.html │ │ │ │ │ ├─reflection │ │ │ │ ExceptionUtil.html │ │ │ │ MetaClass.html │ │ │ │ MetaObject.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ReflectionException.html │ │ │ │ Reflector.html │ │ │ │ SystemMetaObject.html │ │ │ │ │ │ │ ├─factory │ │ │ │ DefaultObjectFactory.html │ │ │ │ ObjectFactory.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ ├─invoker │ │ │ │ GetFieldInvoker.html │ │ │ │ Invoker.html │ │ │ │ MethodInvoker.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ SetFieldInvoker.html │ │ │ │ │ │ │ ├─property │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ PropertyCopier.html │ │ │ │ PropertyNamer.html │ │ │ │ PropertyTokenizer.html │ │ │ │ │ │ │ └─wrapper │ │ │ BaseWrapper.html │ │ │ BeanWrapper.html │ │ │ CollectionWrapper.html │ │ │ DefaultObjectWrapperFactory.html │ │ │ MapWrapper.html │ │ │ ObjectWrapper.html │ │ │ ObjectWrapperFactory.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ │ │ ├─scripting │ │ │ │ LanguageDriver.html │ │ │ │ LanguageDriverRegistry.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ScriptingException.html │ │ │ │ │ │ │ ├─defaults │ │ │ │ DefaultParameterHandler.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ RawLanguageDriver.html │ │ │ │ RawSqlSource.html │ │ │ │ │ │ │ └─xmltags │ │ │ ChooseSqlNode.html │ │ │ DynamicContext.html │ │ │ DynamicSqlSource.html │ │ │ ExpressionEvaluator.html │ │ │ ForEachSqlNode.html │ │ │ IfSqlNode.html │ │ │ MixedSqlNode.html │ │ │ OgnlCache.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ SetSqlNode.html │ │ │ SqlNode.html │ │ │ TextSqlNode.html │ │ │ TrimSqlNode.html │ │ │ VarDeclSqlNode.html │ │ │ WhereSqlNode.html │ │ │ XMLLanguageDriver.html │ │ │ XMLScriptBuilder.html │ │ │ │ │ ├─session │ │ │ │ AutoMappingBehavior.html │ │ │ │ Configuration.html │ │ │ │ ExecutorType.html │ │ │ │ LocalCacheScope.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ ResultContext.html │ │ │ │ ResultHandler.html │ │ │ │ RowBounds.html │ │ │ │ SqlSession.html │ │ │ │ SqlSessionException.html │ │ │ │ SqlSessionFactory.html │ │ │ │ SqlSessionFactoryBuilder.html │ │ │ │ SqlSessionManager.html │ │ │ │ TransactionIsolationLevel.html │ │ │ │ │ │ │ └─defaults │ │ │ DefaultSqlSession.html │ │ │ DefaultSqlSessionFactory.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ │ │ ├─transaction │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ Transaction.html │ │ │ │ TransactionException.html │ │ │ │ TransactionFactory.html │ │ │ │ │ │ │ ├─jdbc │ │ │ │ JdbcTransaction.html │ │ │ │ JdbcTransactionFactory.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ │ │ │ └─managed │ │ │ ManagedTransaction.html │ │ │ ManagedTransactionFactory.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ │ │ └─type │ │ Alias.html │ │ ArrayTypeHandler.html │ │ BaseTypeHandler.html │ │ BigDecimalTypeHandler.html │ │ BigIntegerTypeHandler.html │ │ BlobByteObjectArrayTypeHandler.html │ │ BlobTypeHandler.html │ │ BooleanTypeHandler.html │ │ ByteArrayTypeHandler.html │ │ ByteArrayUtils.html │ │ ByteObjectArrayTypeHandler.html │ │ ByteTypeHandler.html │ │ CharacterTypeHandler.html │ │ ClobTypeHandler.html │ │ DateOnlyTypeHandler.html │ │ DateTypeHandler.html │ │ DoubleTypeHandler.html │ │ EnumOrdinalTypeHandler.html │ │ EnumTypeHandler.html │ │ FloatTypeHandler.html │ │ IntegerTypeHandler.html │ │ JdbcType.html │ │ LongTypeHandler.html │ │ MappedJdbcTypes.html │ │ MappedTypes.html │ │ NClobTypeHandler.html │ │ NStringTypeHandler.html │ │ ObjectTypeHandler.html │ │ package-frame.html │ │ package-summary.html │ │ ShortTypeHandler.html │ │ SimpleTypeRegistry.html │ │ SqlDateTypeHandler.html │ │ SqlTimestampTypeHandler.html │ │ SqlTimeTypeHandler.html │ │ StringTypeHandler.html │ │ TimeOnlyTypeHandler.html │ │ TypeAliasRegistry.html │ │ TypeException.html │ │ TypeHandler.html │ │ TypeHandlerRegistry.html │ │ TypeReference.html │ │ UnknownTypeHandler.html │ │ │ └─xref-test │ │ allclasses-frame.html │ │ index.html │ │ overview-frame.html │ │ overview-summary.html │ │ stylesheet.css │ │ │ ├─com │ │ ├─badbeans │ │ │ BeanWithDifferentTypeGetterSetter.html │ │ │ BeanWithDifferentTypeOverloadedSetter.html │ │ │ BeanWithNoGetterOverloadedSetters.html │ │ │ BeanWithOverloadedSetter.html │ │ │ GoodBean.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ │ │ ├─domain │ │ │ └─misc │ │ │ Employee.html │ │ │ package-frame.html │ │ │ package-summary.html │ │ │ │ │ ├─ibatis │ │ │ ├─common │ │ │ │ ├─jdbc │ │ │ │ │ DbcpConfiguration.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ ScriptRunner.html │ │ │ │ │ SimpleDataSource.html │ │ │ │ │ │ │ │ │ ├─resources │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ Resources.html │ │ │ │ │ ResourcesTest.html │ │ │ │ │ │ │ │ │ └─util │ │ │ │ NodeEvent.html │ │ │ │ NodeEventParser.html │ │ │ │ NodeEventWrapper.html │ │ │ │ NodeletParserTest.html │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ PaginatedArrayList.html │ │ │ │ PaginatedArrayListTest.html │ │ │ │ PaginatedList.html │ │ │ │ Stopwatch.html │ │ │ │ │ │ │ ├─dao │ │ │ │ ├─client │ │ │ │ │ │ Dao.html │ │ │ │ │ │ DaoException.html │ │ │ │ │ │ DaoManager.html │ │ │ │ │ │ DaoManagerBuilder.html │ │ │ │ │ │ DaoTransaction.html │ │ │ │ │ │ package-frame.html │ │ │ │ │ │ package-summary.html │ │ │ │ │ │ │ │ │ │ │ └─template │ │ │ │ │ DaoTemplate.html │ │ │ │ │ JdbcDaoTemplate.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ SqlMapDaoTemplate.html │ │ │ │ │ │ │ │ │ └─engine │ │ │ │ ├─builder │ │ │ │ │ └─xml │ │ │ │ │ DaoClasspathEntityResolver.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ XmlDaoManagerBuilder.html │ │ │ │ │ │ │ │ │ ├─impl │ │ │ │ │ DaoContext.html │ │ │ │ │ DaoImpl.html │ │ │ │ │ DaoProxy.html │ │ │ │ │ DaoTransactionState.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ StandardDaoManager.html │ │ │ │ │ │ │ │ │ └─transaction │ │ │ │ │ ConnectionDaoTransaction.html │ │ │ │ │ DaoTransactionManager.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ │ │ │ │ ├─external │ │ │ │ │ ExternalDaoTransaction.html │ │ │ │ │ ExternalDaoTransactionManager.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ │ │ │ │ ├─jdbc │ │ │ │ │ JdbcDaoTransaction.html │ │ │ │ │ JdbcDaoTransactionManager.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ │ │ │ │ └─sqlmap │ │ │ │ package-frame.html │ │ │ │ package-summary.html │ │ │ │ SqlMapDaoTransaction.html │ │ │ │ SqlMapDaoTransactionManager.html │ │ │ │ │ │ │ ├─jpetstore │ │ │ │ ├─domain │ │ │ │ │ Account.html │ │ │ │ │ BeanIntrospector.html │ │ │ │ │ BeanTest.html │ │ │ │ │ Cart.html │ │ │ │ │ CartItem.html │ │ │ │ │ Category.html │ │ │ │ │ ClassIntrospector.html │ │ │ │ │ DomainFixture.html │ │ │ │ │ Item.html │ │ │ │ │ LineItem.html │ │ │ │ │ Order.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ Product.html │ │ │ │ │ Sequence.html │ │ │ │ │ │ │ │ │ └─persistence │ │ │ │ │ AccountDaoTest.html │ │ │ │ │ BasePersistenceTest.html │ │ │ │ │ CategoryDaoTest.html │ │ │ │ │ DaoConfig.html │ │ │ │ │ DaoManagerTest.html │ │ │ │ │ ItemDaoTest.html │ │ │ │ │ OrderDaoTest.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ PersistenceFixture.html │ │ │ │ │ ProductDaoTest.html │ │ │ │ │ SequenceDaoTest.html │ │ │ │ │ │ │ │ │ ├─iface │ │ │ │ │ AccountDao.html │ │ │ │ │ CategoryDao.html │ │ │ │ │ ItemDao.html │ │ │ │ │ OrderDao.html │ │ │ │ │ package-frame.html │ │ │ │ │ package-summary.html │ │ │ │ │ ProductDao.html │ │ │ │ │ SequenceDao.html │ │ │ │ │ │ │ │ │ └─sqlmapdao │ │ │ │ AccountSqlMapDao.html │ │ │ │ BaseSqlMapDao.html │ │ │ │ CategorySqlMapDao.html │ │ │ │ ItemSqlMapDao.html │ │ │ │ OrderS

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

winrh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值