docs: public static void newSelectKeyMappedStatement(MappedStatement ms, EntityColumn column, Class<?> entityClass, Boolean executeBefore, String identity) {
          String keyId = ms.getId() + SelectKeyGenerator.SELECT_KEY_SUFFIX;
          if (ms.getConfiguration().hasKeyGenerator(keyId)) {
              return;
          }
          //defaults
          Configuration configuration = ms.getConfiguration();
          KeyGenerator keyGenerator;
          String IDENTITY = (column.getGenerator() == null || "".equals(column.getGenerator())) ? identity : column.getGenerator();
          if ("JDBC".equalsIgnoreCase(IDENTITY)) {
              keyGenerator = new Jdbc3KeyGenerator();
          } else {
              SqlSource sqlSource = new RawSqlSource(configuration, IDENTITY, entityClass);
  
              MappedStatement.Builder statementBuilder = new MappedStatement.Builder(configuration, keyId, sqlSource, SqlCommandType.SELECT);
              statementBuilder.resource(ms.getResource());
              statementBuilder.fetchSize(null);
              statementBuilder.statementType(StatementType.STATEMENT);
              statementBuilder.keyGenerator(new NoKeyGenerator());
              statementBuilder.keyProperty(column.getProperty());
              statementBuilder.keyColumn(null);
              statementBuilder.databaseId(null);
              statementBuilder.lang(configuration.getDefaultScriptingLanuageInstance());
              statementBuilder.resultOrdered(false);
              statementBuilder.resulSets(null);
              statementBuilder.timeout(configuration.getDefaultStatementTimeout());
  
              List<ParameterMapping> parameterMappings = new ArrayList<ParameterMapping>();
              ParameterMap.Builder inlineParameterMapBuilder = new ParameterMap.Builder(
                      configuration,
                      statementBuilder.id() + "-Inline",
                      entityClass,
                      parameterMappings);
              statementBuilder.parameterMap(inlineParameterMapBuilder.build());
  
              List<ResultMap> resultMaps = new ArrayList<ResultMap>();
              ResultMap.Builder inlineResultMapBuilder = new ResultMap.Builder(
                      configuration,
                      statementBuilder.id() + "-Inline",
                      column.getJavaType(),
                      new ArrayList<ResultMapping>(),
                      null);
              resultMaps.add(inlineResultMapBuilder.build());
              statementBuilder.resultMaps(resultMaps);
              statementBuilder.resultSetType(null);
  
              statementBuilder.flushCacheRequired(false);
              statementBuilder.useCache(false);
              statementBuilder.cache(null);
  
              MappedStatement statement = statementBuilder.build();
              try {
                  configuration.addMappedStatement(statement);
              } catch (Exception e) {
                  //ignore
              }
              MappedStatement keyStatement = configuration.getMappedStatement(keyId, false);
              //如果单独设置了 order，使用 column 提供的，否则使用全局的
              keyGenerator = new SelectKeyGenerator(keyStatement, column.getOrder() != ORDER.DEFAULT ? (column.getOrder() == ORDER.BEFORE) : executeBefore);
              try {
                  configuration.addKeyGenerator(keyId, keyGenerator);
              } catch (Exception e) {
                  //ignore
              }
          }
          //keyGenerator
          try {
              MetaObject msObject = MetaObjectUtil.forObject(ms);
              msObject.setValue("keyGenerator", keyGenerator);
              msObject.setValue("keyProperties", column.getTable().getKeyProperties());
              msObject.setValue("keyColumns", column.getTable().getKeyColumns());
          } catch (Exception e) {
              //ignore
          }
      }