@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;
 }
 private SqlSource getSqlSource(
     MappedStatement ms, SqlSource sqlSource, Object parameterObject, boolean isCount) {
   if (ms.getSqlSource() instanceof DynamicSqlSource) {
     MetaObject msObject = MetaObjectUtils.forObject(ms);
     SqlNode sqlNode = (SqlNode) msObject.getValue("sqlSource.rootSqlNode");
     MixedSqlNode mixedSqlNode = null;
     if (sqlNode instanceof MixedSqlNode) {
       mixedSqlNode = (MixedSqlNode) sqlNode;
     } else {
       List<SqlNode> contents = new ArrayList<SqlNode>(1);
       contents.add(sqlNode);
       mixedSqlNode = new MixedSqlNode(contents);
     }
     return new CustomerDynamicSqlSource(ms.getConfiguration(), mixedSqlNode, isCount, dialect);
   } else if (sqlSource instanceof ProviderSqlSource) {
     return new CustomerProviderSqlSource(
         ms.getConfiguration(), (ProviderSqlSource) sqlSource, isCount, dialect);
   } else if (!isCount) {
     BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
     return new StaticSqlSource(
         ms.getConfiguration(),
         dialect.generatePageSQL(boundSql.getSql()),
         MybatisUtils.plusTwoParameterToMapping(ms.getConfiguration(), boundSql));
   } else {
     BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
     return new StaticSqlSource(
         ms.getConfiguration(),
         dialect.generateCountSQL(boundSql.getSql()),
         boundSql.getParameterMappings());
   }
 }
 @Override
 protected BoundSql getCountBoundSql(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());
   BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
   sqlSource =
       new StaticSqlSource(
           configuration, parser.getCountSql(boundSql.getSql()), boundSql.getParameterMappings());
   boundSql = sqlSource.getBoundSql(parameterObject);
   // 设置条件参数
   for (Map.Entry<String, Object> entry : context.getBindings().entrySet()) {
     boundSql.setAdditionalParameter(entry.getKey(), entry.getValue());
   }
   return boundSql;
 }
Exemplo n.º 4
0
 @Override
 protected BoundSql getPageBoundSql(Object parameterObject) {
   String tempSql = sql;
   String orderBy = OrderByHelper.getOrderBy();
   if (orderBy != null) {
     tempSql = OrderByParser.converToOrderBySql(sql, orderBy);
   }
   tempSql = parser.getPageSql(tempSql);
   return new BoundSql(
       configuration,
       tempSql,
       parser.getPageParameterMapping(configuration, original.getBoundSql(parameterObject)),
       parameterObject);
 }
Exemplo n.º 5
0
 @Override
 public BoundSql getBoundSql(Object parameterObject) {
   return sqlSource.getBoundSql(parameterObject);
 }