设为首页 加入收藏

TOP

[Java][MyBatis]物理分页实现(二)
2014-11-24 07:11:20 来源: 作者: 【 】 浏览:1
Tags:Java MyBatis 物理 实现
StringBuffer sbSql = new StringBuffer(); // 重写sql Configuration configuration = (Configuration)metaStatementHandler.getValue("delegate.configuration"); DBUtil dbUtil = new DBUtil(configuration); if(dbUtil.isMySQL()){ sbSql.append(sql).append(" LIMIT ").append(rowBounds.getOffset()).append(", ").append(rowBounds.getLimit()); metaStatementHandler.setValue("delegate.boundSql.sql", sbSql.toString()); // 采用物理分页后,就不需要mybatis的内存分页了,所以重置下面的两个参数 metaStatementHandler.setValue("delegate.rowBounds.offset", RowBounds.NO_ROW_OFFSET); metaStatementHandler.setValue("delegate.rowBounds.limit", RowBounds.NO_ROW_LIMIT); } else if(dbUtil.isOracle()){ sbSql.append("SELECT * "); sbSql.append(" FROM (SELECT ROWNUM RN, NOPAGESQL.* "); sbSql.append(" FROM (").append(sql).append(") NOPAGESQL "); sbSql.append(" WHERE ROWNUM <= ").append(rowBounds.getLimit()+rowBounds.getOffset()).append(")"); sbSql.append(" WHERE RN >= ").append(rowBounds.getOffset()); metaStatementHandler.setValue("delegate.boundSql.sql", sbSql.toString()); // 采用物理分页后,就不需要mybatis的内存分页了,所以重置下面的两个参数 metaStatementHandler.setValue("delegate.rowBounds.offset", RowBounds.NO_ROW_OFFSET); metaStatementHandler.setValue("delegate.rowBounds.limit", RowBounds.NO_ROW_LIMIT); } else { } // 将执行权交给下一个拦截器 return invocation.proceed(); } @Override public Object plugin(Object target) { // 当目标类是StatementHandler类型时,才包装目标类,否者直接返回目标本身,减少目标被代理的次数 if (target instanceof StatementHandler) { return Plugin.wrap(target, this); } else { return target; } } @Override public void setProperties(Properties properties) { // TODO Auto-generated method stub } }

2、配置读取类

/**
 * 版权所有:华信软件
 * 项目名称:ACWS框架类
 * 创建者: Wangdf
 * 创建日期: 2014-4-2
 * 文件说明: ACWS框架数据库相关工具类
 */
package framework.core.util;

import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.session.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * ACWS框架数据库相关工具类
 * @author Wangdf
 */
public class DBUtil {
	private static final String DBTYPE_MYSQL = "MySQL";//支持的类型:MySQL,Oracle
	private static final String DBTYPE_ORACLE = "Oracle";//支持的类型:MySQL,Oracle

	private static Logger logger = LoggerFactory.getLogger(DBUtil.class);
	private Configuration configuration = null;
	
	private String dbType = "";
	private String defaultDateFormat = "";
	
	public DBUtil(Configuration configuration){
		if(configuration == null){
			logger.error("系统启动失败:MyBatis Configuration 对象为空!");
			throw new IllegalArgumentException("系统启动失败:MyBatis Configuration 对象为空!");
		}
		this.configuration = configuration;
		this.dbType = this.configuration.getVariables().getProperty("dbtype");
	    if(StringUtils.isBlank(dbType)){
	    	logger.error("数据库类型没有配置!");
	    } else {
	    	logger.info("数据库类型为:"+dbType);
	    }
		this.defaultDateFormat = this.configuration.getVariables().getProperty("defaultDateFormat");
	    if(StringUtils.isBlank(this.defaultDateFormat)){
	    	this.defaultDateFormat="yyyy-MM-dd";
	    	logger.info("数据库日期默认格式字符串没有指定!系统默认为:yyyy-MM-dd");
	    } else {
	    	logger.info("数据库日期默认格式字符串:"+this.defaultDateFormat);
	    }
	}
	
	/**
	 * 判断是否是Oracle数据库
	 * @return
	 * @author wangdf
	 */
	public boolean isO
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇没有索引也可以快速查询 下一篇导入excel文件处理流程节点的解决..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)
·有没有Java swing教 (2025-12-25 15:19:09)
·Start, Stop, and Di (2025-12-25 14:50:57)
·C语言入门教程:零基 (2025-12-25 14:50:54)