DerbyDialect.java 2.0 KB
Newer Older
MaxKey单点登录官方's avatar
c  
MaxKey单点登录官方 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
package org.apache.mybatis.jpa.dialect;

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

import org.apache.mybatis.jpa.persistence.JpaPagination;


public class DerbyDialect extends Dialect {

	public DerbyDialect() {
		super();

	}

	@Override
	public boolean supportsLimit() {
		return true;
	}
	
	@Override
	public String getLimitString(String sql,  JpaPagination pagination) {
		StringBuilder pagingSelectSql = new StringBuilder(sql.length() + 50);

		pagingSelectSql.append( sql );
		
		if ( pagination.getStartRow() == 0 ) {
			pagingSelectSql.append( " fetch first " );
		}
		else {
			pagingSelectSql.append( " offset " ).append( pagination.getStartRow() ).append( " rows fetch next " );
		}

MaxKey单点登录官方's avatar
GA  
MaxKey单点登录官方 已提交
34
		pagingSelectSql.append( pagination.getPageSize() ).append( " rows only" );
MaxKey单点登录官方's avatar
c  
MaxKey单点登录官方 已提交
35 36 37 38 39 40 41 42
		
		
		return pagingSelectSql.toString();
	}
	
	@Override
	public String getPreparedStatementLimitString(String sql,  JpaPagination pagination) {
		//LIMIT #{pageResults}  OFFSET #{startRow}
MaxKey单点登录官方's avatar
GA  
MaxKey单点登录官方 已提交
43
		if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
M
Highgo  
MaxKey 已提交
44
			return sql +  " limit ? , ?";
MaxKey单点登录官方's avatar
GA  
MaxKey单点登录官方 已提交
45
		}else if(pagination.getPageSize()>0){
M
Highgo  
MaxKey 已提交
46
			return sql +  " limit  ? ";
MaxKey单点登录官方's avatar
c  
MaxKey单点登录官方 已提交
47
		}else{
M
Highgo  
MaxKey 已提交
48
			return sql +  " limit ?";
MaxKey单点登录官方's avatar
c  
MaxKey单点登录官方 已提交
49 50 51 52 53 54 55
		}
	}
	
	
	public void setLimitParamters(PreparedStatement preparedStatement,int parameterSize,JpaPagination pagination) {
		
		try {
MaxKey单点登录官方's avatar
GA  
MaxKey单点登录官方 已提交
56 57 58 59 60
			if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
				preparedStatement.setInt(++parameterSize, pagination.getPageSize());
				preparedStatement.setInt(++parameterSize, pagination.getPageSize());
			}else if(pagination.getPageSize()>0){
				preparedStatement.setInt(++parameterSize, pagination.getPageSize());
MaxKey单点登录官方's avatar
c  
MaxKey单点登录官方 已提交
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
			}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 + "]";
	}
}