All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.baomidou.mybatisplus.extension.plugins.pagination.dialects.SQLServer2005Dialect Maven / Gradle / Ivy

There is a newer version: 3.5.7
Show newest version
/*
 * Copyright (c) 2011-2014, hubin ([email protected]).
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.baomidou.mybatisplus.extension.plugins.pagination.dialects; import com.baomidou.mybatisplus.core.toolkit.StringUtils; /** *

* SQLServer 2005 数据库分页方言 *

* * @author hubin * @since 2016-11-10 */ public class SQLServer2005Dialect implements IDialect { private static String getOrderByPart(String sql) { String loweredString = sql.toLowerCase(); int orderByIndex = loweredString.indexOf("order by"); if (orderByIndex != -1) { return sql.substring(orderByIndex); } else { return ""; } } @Override public String buildPaginationSql(String originalSql, long offset, long limit) { StringBuilder pagingBuilder = new StringBuilder(); String orderby = getOrderByPart(originalSql); String distinctStr = ""; String loweredString = originalSql.toLowerCase(); String sqlPartString = originalSql; if (loweredString.trim().startsWith("select")) { int index = 6; if (loweredString.startsWith("select distinct")) { distinctStr = "DISTINCT "; index = 15; } sqlPartString = sqlPartString.substring(index); } pagingBuilder.append(sqlPartString); // if no ORDER BY is specified use fake ORDER BY field to avoid errors if (StringUtils.isEmpty(orderby)) { orderby = "ORDER BY CURRENT_TIMESTAMP"; } StringBuilder sql = new StringBuilder(); sql.append("WITH select AS (SELECT ").append(distinctStr).append("TOP 100 PERCENT ") .append(" ROW_NUMBER() OVER (").append(orderby).append(") as __row_number__, ").append(pagingBuilder) .append(") SELECT * FROM select WHERE __row_number__ BETWEEN ") //FIX#299:原因:mysql中limit 10(offset,size) 是从第10开始(不包含10),;而这里用的BETWEEN是两边都包含,所以改为offset+1 .append(offset + 1) .append(" AND ") .append(offset + limit).append(" ORDER BY __row_number__"); return sql.toString(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy