Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package com.penglecode.common.mybatis;
 
 
Mybatis分页插件-在执行sql前将原始sql转换为分页sql

Author(s):
pengpeng
Version:
1.0
Date:
2014年7月28日 下午3:49:03
@Intercepts({@Signature(type=StatementHandler.class, method = "prepare", args = {Connection.class})})
public class PaginationInterceptor implements Interceptor {
	private Dialect dialect;
	public Object intercept(Invocation invocationthrows Throwable {
		StatementHandler statementHandler = (StatementHandler)invocation.getTarget();
		MetaObject metaStatementHandler = MetaObject.forObject(statementHandlernew DefaultObjectFactory(), new DefaultObjectWrapperFactory());
		RowBounds rowBounds = (RowBounds)metaStatementHandler.getValue("delegate.rowBounds");
		if(rowBounds == null || rowBounds == .){
			return invocation.proceed();
		}
		if( == null){
			Configuration configuration = (ConfigurationmetaStatementHandler.getValue("delegate.configuration");
			Dialect.Type databaseType = null;
			String d = configuration.getVariables().getProperty("dialect");
			if(d == null || d.trim().equals("")){
				throw new IllegalStateException("No property named with 'dialect' defined in mybatis configuration xml file.");
			}
			try {
				databaseType = Dialect.Type.valueOf(d);
catch (Exception e) {
				throw new IllegalStateException(String.format("No such dialect enum defined in class %s."Dialect.Type.class));
			}
			switch (databaseType) {
			  	case // Oracle分页
			  		 = new OracleDialect();
			  		break;
			  	case // MySQL分页
			  		 = new MySQLDialect();
			  		break;
			}
			if( == null){
				throw new IllegalStateException(String.format("No %s dialect found!"databaseType));
			}
		}
		String originalSql = metaStatementHandler.getValue("delegate.boundSql.sql").toString();
		metaStatementHandler.setValue("delegate.boundSql.sql".getLimitSql(originalSqlrowBounds.getOffset(), rowBounds.getLimit()));
		metaStatementHandler.setValue("delegate.rowBounds.offset".);
        metaStatementHandler.setValue("delegate.rowBounds.limit".);
        return invocation.proceed(); 
	}
	public Object plugin(Object target) {
		return Plugin.wrap(targetthis);
	}
	public void setProperties(Properties properties) {}
New to GrepCode? Check out our FAQ X