DerbyDialect.java 2.4 KB
Newer Older
M
MaxKey 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
 * Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
 * 
 * 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 org.dromara.mybatis.jpa.dialect;

import java.sql.PreparedStatement;
import java.sql.SQLException;

M
MaxKey 已提交
23
import org.dromara.mybatis.jpa.entity.JpaPage;
M
MaxKey 已提交
24 25 26 27 28 29 30 31 32 33 34 35 36 37

public class DerbyDialect extends Dialect {

	public DerbyDialect() {
		super();

	}

	@Override
	public boolean supportsLimit() {
		return true;
	}
	
	@Override
M
MaxKey 已提交
38
	public String getLimitString(String sql,  JpaPage page) {
M
MaxKey 已提交
39 40 41 42
		StringBuilder pagingSelectSql = new StringBuilder(sql.length() + 50);

		pagingSelectSql.append( sql );
		
M
MaxKey 已提交
43
		if ( page.getStartRow() == 0 ) {
M
MaxKey 已提交
44 45 46
			pagingSelectSql.append( " fetch first " );
		}
		else {
M
MaxKey 已提交
47
			pagingSelectSql.append( " offset " ).append( page.getStartRow() ).append( " rows fetch next " );
M
MaxKey 已提交
48 49
		}

M
MaxKey 已提交
50
		pagingSelectSql.append( page.getPageSize() ).append( " rows only" );
M
MaxKey 已提交
51 52 53 54 55 56
		
		
		return pagingSelectSql.toString();
	}
	
	@Override
M
MaxKey 已提交
57
	public String getPreparedStatementLimitString(String sql,  JpaPage pagination) {
M
MaxKey 已提交
58 59 60 61 62 63 64 65 66 67 68
		//LIMIT #{pageResults}  OFFSET #{startRow}
		if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
			return sql +  " limit ? , ?";
		}else if(pagination.getPageSize()>0){
			return sql +  " limit  ? ";
		}else{
			return sql +  " limit ?";
		}
	}
	
	
M
update  
MaxKey 已提交
69
	@Override
M
MaxKey 已提交
70
	public void setLimitParamters(PreparedStatement preparedStatement,int parameterSize,JpaPage page) {
M
MaxKey 已提交
71 72
		
		try {
M
MaxKey 已提交
73 74 75 76 77
			if(page.getPageSize()>0&&page.getStartRow()>0){
				preparedStatement.setInt(++parameterSize, page.getPageSize());
				preparedStatement.setInt(++parameterSize, page.getPageSize());
			}else if(page.getPageSize()>0){
				preparedStatement.setInt(++parameterSize, page.getPageSize());
M
MaxKey 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
			}else{
				preparedStatement.setInt(++parameterSize, 1000);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "DerbyDialect [" + DerbyDialect.class + "]";
	}
}