📄 pageinfoquerycallback.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 + -