⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagecache.java

📁 适合各种数据库的分页程序
💻 JAVA
字号:
package com.ztes.commons.dbo.pagination;

import java.util.HashMap;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.support.PropertiesLoaderUtils;

import com.ztes.commons.util.MapUtils;
import com.ztes.commons.util.PropertiesUtils;



/**
 * 缓存分页实例,每个标识的分页对象只获取一次,以后便从缓冲中获取。
 * 
 * @author tiannet(曾次清)
 *
 */
public class PageCache {

	/**缓存,存储标识与对象的映射*/
	private static HashMap<String,Page> pageCache = new HashMap<String,Page>();
	/**缓存,存储标识与分页配置对象的映射*/
	private static HashMap<String,PageConfig> pageConfigCache = new HashMap<String,PageConfig>();
	/**日志记录*/
	private static Log logger = LogFactory.getLog(PageCache.class);
	
	/**
	 * 从位于class path下的属性文件中读取分页信息(只读取一次)并构建分页配置对象的实例。
	 * @param resourceName 位于class path下的属性文件
	 * @param id 配置文件中的ID。
	 * @return 分页配置对象的实例。
	 */
	public static PageConfig getPageConfigFromProperties(String resourceName,String id){
		String unique = resourceName.hashCode() + "_" + id.hashCode();
		if( pageConfigCache.containsKey(unique) ) {
			return pageConfigCache.get(unique); 
		}
		try {
			//读取所有的属性
			Properties properties = PropertiesLoaderUtils.loadAllProperties(resourceName);
			//得到分页实现类名
			String pageClassName = (String)properties.get(id + ".pageClassName");
			//得到默认分页配置
			Properties pageConfig = PropertiesUtils.extractPropByKeyStartsWith(properties,"page.default.");
			//追加指定分页对象配置
			Properties p = PropertiesUtils.extractPropByKeyStartsWith(properties,"page." + id + ".");
			pageConfig.putAll(p);
			if( pageClassName != null ) {
				pageConfig.put("pageClassName", pageClassName);
			}
			PageConfig pc = (PageConfig)MapUtils.toBean(pageConfig,PageConfig.class);
			pageConfigCache.put(unique, pc);
			return pc;
			
		} catch(Exception e) {
			logger.error(e);
			throw new IllegalArgumentException("无法根据配置文件(" + resourceName + ")信息获取标识为" + id + "的分页配置实例:" + e.getMessage());
		}
	}//end getPageConfigFromProperties
	
	/**
	 * 得到唯一的分页实例。
	 * @param pageClassName 分页的实现类。
	 * @param config 分页配置信息,对应{@link PageConfig}
	 * @return 分页实例。
	 * @throws Exception
	 */
	public static Page getInstance(String pageClassName, Properties config) throws Exception {
		String id = pageClassName.hashCode() + "_" + config.hashCode();
		if( pageCache.containsKey(id) ) {
			return pageCache.get(id); 
		}
		//System.out.println("获取分页实例");
		Page page = null;
		page = (Page)Class.forName(pageClassName).newInstance();
		PageConfig pc = (PageConfig)MapUtils.toBean(config,PageConfig.class);
		page.setPageConfig(pc);
		pageCache.put(id,page);
		return page;
	}//end getInstance
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -