@SuppressWarnings("rawtypes")
 @Override
 protected BoundSql getPageBoundSql(Object parameterObject) {
   DynamicContext context;
   // 由于增加分页参数后会修改parameterObject的值,因此在前面处理时备份该值
   // 如果发现参数是Map并且包含该KEY,就使用备份的该值
   // 解决bug#25:http://git.oschina.net/free/Mybatis_PageHelper/issues/25
   if (parameterObject != null
       && parameterObject instanceof Map
       && ((Map) parameterObject).containsKey(ORIGINAL_PARAMETER_OBJECT)) {
     context =
         new DynamicContext(configuration, ((Map) parameterObject).get(ORIGINAL_PARAMETER_OBJECT));
   } else {
     context = new DynamicContext(configuration, parameterObject);
   }
   rootSqlNode.apply(context);
   SqlSourceBuilder sqlSourceParser = new SqlSourceBuilder(configuration);
   Class<?> parameterType = parameterObject == null ? Object.class : parameterObject.getClass();
   SqlSource sqlSource =
       sqlSourceParser.parse(context.getSql(), parameterType, context.getBindings());
   sqlSource = new OrderByStaticSqlSource((StaticSqlSource) sqlSource);
   BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
   sqlSource =
       new StaticSqlSource(
           configuration,
           parser.getPageSql(boundSql.getSql()),
           parser.getPageParameterMapping(configuration, boundSql));
   boundSql = sqlSource.getBoundSql(parameterObject);
   // 设置条件参数
   for (Map.Entry<String, Object> entry : context.getBindings().entrySet()) {
     boundSql.setAdditionalParameter(entry.getKey(), entry.getValue());
   }
   return boundSql;
 }
 @Override
 protected BoundSql getDefaultBoundSql(Object parameterObject) {
   DynamicContext context = new DynamicContext(configuration, parameterObject);
   rootSqlNode.apply(context);
   SqlSourceBuilder sqlSourceParser = new SqlSourceBuilder(configuration);
   Class<?> parameterType = parameterObject == null ? Object.class : parameterObject.getClass();
   SqlSource sqlSource =
       sqlSourceParser.parse(context.getSql(), parameterType, context.getBindings());
   sqlSource = new OrderByStaticSqlSource((StaticSqlSource) sqlSource);
   BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
   // 设置条件参数
   for (Map.Entry<String, Object> entry : context.getBindings().entrySet()) {
     boundSql.setAdditionalParameter(entry.getKey(), entry.getValue());
   }
   return boundSql;
 }
Beispiel #3
0
 private static String getSql(Configuration configuration, SqlNode rootSqlNode) {
   DynamicContext context = new DynamicContext(configuration, null);
   rootSqlNode.apply(context);
   return context.getSql();
 }