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

📄 pageinfoquerycallback.java

📁 这是一个用java三层框架做的ISS学员管理系统
💻 JAVA
字号:
package org.pontifex.orm.hibernate3;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.pontifex.util.StringUtil;


/**
 * 
 * User: Songzou
 * Date: 2007-04-08
 * Time: 11:48:00
 * 分页查询专用 Query 回调接口
 * 
 */

public interface PageInfoQueryCallback {

	/**
	 * 
	 */
	public static final PageInfoValueTypes EQ = new PageInfoValueTypes(){
		public String toMatchString(String pattern) {
			return pattern;
		}
	};	
	
	public static final PageInfoValueTypes START = new PageInfoValueTypes(){
		public String toMatchString(String pattern) {
			return pattern+"%";
		}
	};	
	
	public static final PageInfoValueTypes END = new PageInfoValueTypes(){
		public String toMatchString(String pattern) {
			return "%"+pattern;
		}
	};

	public static final PageInfoValueTypes LIKE = new PageInfoValueTypes(){
		public String toMatchString(String pattern) {
			return "%"+pattern+"%";
		}
	};
	
	/**
	 * 分页查询Query接口方法
	 * 
	 * 只要将 HQL 存入PageInfoBuffer 语句即可 例如 :from Menuinfo as m where m.state=:state order by m.menuid
	 * 
	 * @param hql
	 * @throws HibernateException
	 */
	public void doInPageInfoString(PageInfoBuffer hql);

	/**
	 * 分页查询实际参数输入
	 * @param values
	 */
	public void doInPageInfoValues(PageInfoMapValues values);
	
	/**
	 * 
	 * @author Songzou
	 *
	 */
	public interface PageInfoValueTypes{
		String toMatchString(String pattern) ;
	}
	
	
	public interface PageInfoBuffer{	
		
		public void dynamicMatchWhere();
		
		public boolean isNotEmpty(String input,String hqlString);
			
		public boolean isNotNull(Object obj,String hqlString);
		
		public PageInfoBuffer append(String input);
		
		public String toString();
		
		public static final class PageInfoBufferImpl implements PageInfoBuffer{
			private StringBuffer stringBuffer ;
			
			private boolean dynamicMatchWhere = false ; //是否存在需要动态匹配的字段
			
			private boolean isDynamicMatchWhere = false ; //是否调用了dynamicMatchWhere()方法
			
			private String random ;
			
			//private PageInfoMapValues values;
			
			
			public PageInfoBufferImpl(){
				stringBuffer = new StringBuffer();
			//	values = new PageInfoMapValues();
			}
			
			
			 public void dynamicMatchWhere(){
				 isDynamicMatchWhere = true ;
				 random = StringUtil.getRandomChar(32);
				 stringBuffer.append(random);
			 }
			 
			 /**
			   * 判断字符是否为空
			   *
			   * @param input 某字符串
			   * @return 包含则返回false,否则返回true
			   */
			  public boolean isNotEmpty(String input,String hqlString) {
				  	boolean _input = StringUtil.isNotEmpty(input);
				    if(_input){
				    	stringBuffer.append(" and ");
				    	stringBuffer.append(hqlString);
				    	stringBuffer.append(" ");
				    	dynamicMatchWhere = true ;
				    }
				    return _input;
			  }
			
			  public boolean isNotNull(Object obj,String hqlString){
				  boolean _input = (obj != null);
				    if(_input){
				    	stringBuffer.append(" and ");
				    	stringBuffer.append(hqlString);
				    	stringBuffer.append(" ");
				    	dynamicMatchWhere = true ;
				    }
				    return _input;
			  }
			  
			  public PageInfoBuffer append(String input){
				  stringBuffer.append(" ");
				  stringBuffer.append(input);
				  stringBuffer.append(" ");
				  return this;
			  }
			  
			  public String toString(){
				  String returnSql = stringBuffer.toString();  
				  if(isDynamicMatchWhere){
					  if(dynamicMatchWhere){
						  return StringUtil.replace(returnSql, random, " where 1=1 ");
					  }
					  return StringUtil.replace(returnSql, random, " "); 
				  }
				  return returnSql ;
			  }
		}
	}
	
	
	/**
	  * User: Songzou<br>
	  * Date: 2007-04-08<br>
	  * Time: 11:48:00<br>
	  * 内部存储业务条件数据专用类<br>
	 */
	public static final class PageInfoMapValues {

		/**
		 * 主要存储map
		 */
		private Map<String, Object> map = new HashMap<String, Object>();

		/**
		 * 主要存储条件方法
		 * @param key
		 * @param value
		 * @param eq
		 */
		public void put(String key, String value, PageInfoValueTypes eq) {
			if(eq==null){
				throw new NullPointerException("are you sure the type "+eq+" was right ?");
			}			
			map.put(key, eq.toMatchString(value));
		}

		public void put(String key, Boolean value) {
			map.put(key, value);
		}
		
		public void put(String key, Integer value){
			map.put(key, value);
		}
		
		public void put(String key, Byte value){
			map.put(key, value);
		}
		
		public void put(String key, BigDecimal value){
			map.put(key, value);
		}
		
		public void put(String key, Double value){
			map.put(key, value);
		}
		
		public void put(String key, Float value){
			map.put(key, value);
		}
		
		public void put(String key, Long value){
			map.put(key, value);
		}
		
		public void put(String key, Short value){
			map.put(key, value);
		}

		public void put(String key, Date value){
			map.put(key, value);
		}
		
		public void put(String key, Calendar value){
			map.put(key, value);
		}
		
		public void put(String key, Character value){
			map.put(key, value);
		}
		
		public void put(String key, Timestamp value){
			map.put(key, value);
		}
		
		/**
		 * 根据传入的value对象的运行时类型来填充数据
		 * @param query
		 * @param key
		 * @param value
		 * @param type
		 */
		private void setParameterValue(Query query, String key, Object value) {
			if (null == key || null == value) {
				return;
			} else if (value instanceof Boolean) {
				query.setBoolean(key, ((Boolean) value).booleanValue());
			} else if (value instanceof String) {
				query.setString(key, (String) value);
			} else if (value instanceof Integer) {
				query.setInteger(key, ((Integer) value).intValue());
			} else if (value instanceof Long) {
				query.setLong(key, ((Long) value).longValue());
			} else if (value instanceof Float) {
				query.setFloat(key, ((Float) value).floatValue());
			} else if (value instanceof Double) {
				query.setDouble(key, ((Double) value).doubleValue());
			} else if (value instanceof BigDecimal) {
				query.setBigDecimal(key, (BigDecimal) value);
			} else if (value instanceof Byte) {
				query.setByte(key, ((Byte) value).byteValue());
			} else if (value instanceof Calendar) {
				query.setCalendar(key, (Calendar) value);
			} else if (value instanceof Character) {
				query.setCharacter(key, ((Character) value).charValue());
			} else if (value instanceof Timestamp) {
				query.setTimestamp(key, (Timestamp) value);
			} else if (value instanceof Date) {
				query.setDate(key, (Date) value);
			} else if (value instanceof Short) {
				query.setShort(key, ((Short) value).shortValue());
			}
		}

		/**
		 * 根据传入的query的填充数据
		 * @param query
		 */
		void setParameterValue(Query query) {
			for (String key : query.getNamedParameters()) {
				setParameterValue(query, key, map.get(key));
			}

		}
	}
}

⌨️ 快捷键说明

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