OracleDialect.java 2.1 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
package org.apache.mybatis.jpa.dialect;

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

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



public class OracleDialect extends Dialect {

	public OracleDialect() {
		super();

	}

	@Override
	public boolean supportsLimit() {
		return true;
	}
	
	@Override
	public String getLimitString(String sql,  JpaPagination pagination) {
MaxKey单点登录官方's avatar
GA  
MaxKey单点登录官方 已提交
24
		if ( pagination.getPageSize() == 0 ) {
MaxKey单点登录官方's avatar
c  
MaxKey单点登录官方 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
			return sql + " fetch first " + pagination.getStartRow() + " rows only";
		}
		StringBuilder pagingSelect = new StringBuilder( sql.length() + 200 )
				.append(
						"select * from (select inner_table_.*, rownum as rownumber_  from ( "
				)
				.append( sql )  //nest the main query in an outer select
				.append( ")  inner_table_ )  where rownumber_ > " )
				.append( pagination.getStartRow() )
				.append(" and rownumber_ <=")
				.append( pagination.getEndRow() )
				.append( " order by rownumber_" );
		return pagingSelect.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 "OracleDialect [" + OracleDialect.class + "]";
	}
}