亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? abstractdaohibernate.java

?? 基于java的組號查詢模塊
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/**
 * 
 */
package com.lily.dap.dao.hibernate;

import java.io.Serializable;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.type.Type;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.lily.dap.Constants;
import com.lily.dap.dao.Dao;
import com.lily.dap.dao.QueryCallback;
import com.lily.dap.dao.TransitionCallback;
import com.lily.dap.dao.support.DaoHelper;
import com.lily.dap.model.QueryCondition;
import com.lily.dap.model.QueryExpression;
import com.lily.dap.model.QueryOrder;

/**
 * @author zouxuemo
 *
 */
public class AbstractDaoHibernate extends HibernateDaoSupport implements Dao {
    protected final Log logger = LogFactory.getLog(getClass());

	/* (non-Javadoc)
	 * @see com.lily.dap.dao.BasetDao#get(java.lang.Class, java.io.Serializable)
	 */
	public Object get(Class clazz, Serializable id)
			throws ObjectRetrievalFailureException {
        Object o = getHibernateTemplate().get(clazz, id);

        if (o == null) {
        	logger.warn("給定id為[" + id + "]的" + clazz.getName() + "對象沒找到...");
            throw new ObjectRetrievalFailureException(clazz, id);
        }

        return o;
	}

	/* (non-Javadoc)
	 * @see com.lily.dap.dao.BasetDao#save(java.lang.Object)
	 */
	public void save(Object o) {
        getHibernateTemplate().saveOrUpdate(o);
	}

	/* (non-Javadoc)
	 * @see com.lily.dap.dao.BasetDao#remove(java.lang.Class, java.io.Serializable)
	 */
	public void remove(Class clazz, Serializable id)
			throws ObjectRetrievalFailureException {
		remove(get(clazz, id));
	}
	
	public void remove(Object entity) {
		getHibernateTemplate().delete(entity);
	}

	/* (non-Javadoc)
	 * @see com.lily.dap.dao.BasetDao#reload(java.lang.Object)
	 */
	public void reload(Object object) {
        getHibernateTemplate().refresh(object);
	}

	/* (non-Javadoc)
	 * @see com.lily.dap.dao.BasetDao#gets(java.lang.Class, com.lily.dap.model.QueryCondition)
	 */
	public List gets(Class clazz, QueryCondition queryCondition) {
		return gets(clazz, queryCondition, null);
	}

	/* (non-Javadoc)
	 * @see com.lily.dap.dao.BasetDao#gets(java.lang.Class, com.lily.dap.model.QueryCondition, com.lily.dap.model.QueryCallBack)
	 */
	public List gets(Class clazz, QueryCondition queryCondition, QueryCallback callBack) {
		String hql = parseQueryCondition(clazz, queryCondition, callBack);
		
		if ( logger.isDebugEnabled() ) {
			logger.debug("gets - [" + hql + "]...");
		}
		
		return executeFind(hql, queryCondition.getPageNo(), queryCondition.getPageSize());
	}
	
	public long count(Class clazz, QueryCondition queryCondition) {
		return count(clazz, queryCondition, null);
	}
	
	public long count(Class clazz, QueryCondition queryCondition, QueryCallback callBack) {
		String hql = parseQueryCondition(clazz, queryCondition, callBack);
		
		int index = hql.indexOf("group by");
		if (index < 0)
			index = hql.indexOf("order by");
		
		if (index >= 0)
			hql = hql.substring(0, index);
			
		hql = "select count(*) " + hql.substring(hql.indexOf("from"));
		
		if ( logger.isDebugEnabled() ) {
			logger.debug("count - [" + hql + "]...");
		}
		
		List result =  executeFind(hql);
		long count = 0;
		if (result.size() > 0)
			count = ((Long)result.get(0)).longValue();
		
		return count;
	}
	
	private String parseQueryCondition(Class clazz, QueryCondition queryCondition, QueryCallback callBack) {
		StringBuffer buf = new StringBuffer();
		
		//如果指定了要返回的字段,則構造選擇字段的HQL語句
		if (queryCondition.getSelects() != null && queryCondition.getSelects().length > 0) {
			String[] selects = queryCondition.getSelects();
			buf.append("select ").append(selects[0]);
			
			for (int i = 1; i < selects.length; i++)
				buf.append(",").append(selects[i]);
			
			buf.append(" ");
		}
			
		buf.append("from ").append(clazz.getName()).append(" where ");
		
		//從查詢表達式列表讀取查詢表達式,檢查表達式字段是否屬于類中的屬性值,檢查表達式操作是否支持,構造HQL條件語句
		queryCondition.beginFindCondition();
		QueryExpression expression;
		while ((expression = queryCondition.findNextCondition()) != null) {
			if (callBack != null) {
				String cond = callBack.parseCondition(expression);
				if (cond != null && !"".equals(cond)){
					if (!QueryCallback.IGRONE.equals(cond))
						buf.append(cond).append(" and ");
					
					continue;
				}
			}
			
			String name = expression.getName();
			
			Class type;
			Method method = null;
			try {
				method = DaoHelper.getMethod(clazz, name);
			} catch (SecurityException e) {
				logger.warn("給定的查詢字段[" + name + "]在[" + clazz.getName() + "]類中不允許操作!");
				continue;
			} catch (NoSuchMethodException e) {
				logger.warn("給定的查詢字段[" + name + "]在[" + clazz.getName() + "]類中不存在!");
				continue;
			}
			
			type = method.getReturnType();
			String expressionType = expression.getType();
			
			boolean isSingleQuotesFlag = false;
			if (expressionType != null) {
				if(QueryExpression.TYPE_STRING.equals(expressionType) || QueryExpression.TYPE_DATE.equals(expressionType))
					isSingleQuotesFlag = true;
			} else if (type == String.class || type == Date.class || type == Time.class || type == Timestamp.class) {
				isSingleQuotesFlag = true;
			}
			
			String value = DaoHelper.expressionValue2String(expression.getValue());

			//如果是數值型,則如果條件值為Constants.RETRIEVE_ALL時忽略該條件。如果是字符串型,則如果條件值為空字符串時忽略該條件
			if ("long".equals(type.getName()) || "int".equals(type.getName()) || type == Long.class || type == Integer.class) {
				if (value.equals(String.valueOf(Constants.RETRIEVE_ALL)))
					continue;
			} else if (type == String.class) {
				if ("".equals(value))
					continue;
			}
			
			//其他類型就要求提供查詢值
			if ("".equals(value)) {
				logger.warn("給定的查詢字段[" + name + ":" + type.getName() + "]必須輸入查詢條件值!");
				continue;
			}
			
			String op = expression.getOp(); 
			if (QueryExpression.OP_EQ.equals(op) || 
				QueryExpression.OP_NE.equals(op) || 
				QueryExpression.OP_GE.equals(op) || 
				QueryExpression.OP_GT.equals(op) ||
				QueryExpression.OP_LE.equals(op) || 
				QueryExpression.OP_LT.equals(op)) {
				buf.append(name).append(" ").append(op).append(" ");
				if (isSingleQuotesFlag)
					buf.append("'").append(value).append("'");
				else
					buf.append(value);
				buf.append(" and ");
			} else if (QueryExpression.OP_LIKE.equals(op)) {
				buf.append(name).append(" like '%").append(value).append("%' and ");
			} else if (QueryExpression.OP_LLIKE.equals(op)) {
				buf.append(name).append(" like '%").append(value).append("' and ");
			} else if (QueryExpression.OP_RLIKE.equals(op)) {
				buf.append(name).append(" like '").append(value).append("%' and ");
			} else if (QueryExpression.OP_IN.equals(op) || QueryExpression.OP_NOTIN.equals(op)) {
				if (QueryExpression.OP_IN.equals(op))
					buf.append(name).append(" in (");
				else
					buf.append(name).append(" not in (");
				
				StringTokenizer valuest = new StringTokenizer(value, QueryExpression.VALUE_SPLIT);
				int c = 0;
				while (valuest.hasMoreTokens()) {
					String val = valuest.nextToken();

					if (c++ > 0)
						buf.append(", ");
						
					if (isSingleQuotesFlag)
						buf.append("'").append(val).append("'");
					else
						buf.append(val);
				}
				
				buf.append(") and ");
			} else if (QueryExpression.OP_INCLUDE.equals(op)) {
				int[] ary = DaoHelper.parseNumExpression(value);
				if (ary.length == 0) {
					logger.warn("給定的include查詢操作值[" + value + "]格式錯誤!");
					continue;
				}
				
				buf.append(name).append(" in (").append(ary[0]);
				for (int i = 1; i < ary.length; i++)
					buf.append(", ").append(ary[0]);
				buf.append(") and ");
			} else if (QueryExpression.OP_INQUERY.equals(op)) {
				buf.append(name).append(" in (").append(value).append(") and ");
			} else {
				logger.warn("對" + name + "的查詢操作[" + op + "]不可識別!");
				continue;
			}
		}
		
		if (" and ".equals(buf.substring(buf.length() - 5)))
			buf = buf.delete(buf.length() - 5, buf.length());
		else
			buf = buf.delete(buf.length() - 7, buf.length());
		
		if (queryCondition.getGroupbys() != null && queryCondition.getGroupbys().length > 0) {
			String[] groupbys = queryCondition.getGroupbys();
			buf.append(" group by ").append(groupbys[0]);
			
			for (int i = 1; i < groupbys.length; i++)
				buf.append(",").append(groupbys[i]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡视频在线| 欧美日韩1区2区| 丝袜美腿成人在线| 一区二区欧美视频| 综合欧美一区二区三区| 中文字幕不卡三区| 中国色在线观看另类| 国产精品无遮挡| 中文成人综合网| 亚洲欧美激情小说另类| 成人免费一区二区三区视频| 中文字幕免费一区| 国产精品家庭影院| 一区二区三区高清| 日日摸夜夜添夜夜添国产精品| 亚洲成人免费看| 九九热在线视频观看这里只有精品| 青青草精品视频| 韩日av一区二区| 国产不卡高清在线观看视频| 亚洲高清中文字幕| 欧日韩精品视频| 国产精品亚洲午夜一区二区三区 | 狠狠色狠狠色合久久伊人| 精品一区二区三区久久| 91黄色在线观看| 欧美色综合影院| 久久理论电影网| 亚洲女性喷水在线观看一区| 亚洲国产你懂的| 狠狠色丁香久久婷婷综合_中| 国产不卡视频在线观看| 欧美日韩综合不卡| 久久久久久久国产精品影院| 亚洲乱码国产乱码精品精小说| 午夜精品影院在线观看| 国产伦理精品不卡| 一本久道中文字幕精品亚洲嫩 | 亚洲一区av在线| 天堂午夜影视日韩欧美一区二区| 久久精品999| 91欧美一区二区| 日韩欧美国产电影| 亚洲精品欧美激情| 激情欧美一区二区| 91成人在线精品| 国产亚洲短视频| 亚洲成av人片在线观看| 成人综合婷婷国产精品久久蜜臀| 欧美久久免费观看| 亚洲女性喷水在线观看一区| 国产一区二区三区在线观看精品 | 亚洲国产精品久久一线不卡| 国内一区二区在线| 欧美体内she精高潮| 国产日韩欧美精品电影三级在线| 亚洲一区在线看| 99久久综合99久久综合网站| 欧美成人免费网站| 丝袜诱惑制服诱惑色一区在线观看| 成人深夜在线观看| 久久精品一区八戒影视| 老司机一区二区| 欧美三区在线观看| 一区二区三区91| 一本一道久久a久久精品| 中文字幕二三区不卡| 国产乱对白刺激视频不卡| 日韩女优av电影在线观看| 日韩av一二三| 欧美精品精品一区| 香蕉久久夜色精品国产使用方法| 91久久精品午夜一区二区| 中文字幕亚洲欧美在线不卡| 国产91精品免费| 国产视频一区在线播放| 国产成人无遮挡在线视频| 2022国产精品视频| 国产精品综合久久| 国产午夜精品一区二区| 成人99免费视频| 中文字幕综合网| 色综合久久天天| 亚洲一区视频在线观看视频| 在线精品观看国产| 天天影视色香欲综合网老头| 欧美精品日韩精品| 麻豆精品久久精品色综合| 一区二区不卡在线播放| 在线免费亚洲电影| 日日摸夜夜添夜夜添亚洲女人| 日韩欧美一二三区| 精品一二三四在线| 欧美激情自拍偷拍| 成人午夜电影网站| 1024成人网| 欧美www视频| 亚洲特级片在线| 色婷婷久久综合| 亚洲国产精品影院| 欧美本精品男人aⅴ天堂| 捆绑调教一区二区三区| 国产亚洲欧美色| 91麻豆精东视频| 欧美a一区二区| 国产视频一区在线观看| 91毛片在线观看| 青娱乐精品视频| 国产精品污www在线观看| 欧美性生活影院| 美脚の诱脚舐め脚责91| 中文字幕乱码一区二区免费| 色综合久久综合网欧美综合网| 天天综合网 天天综合色| 久久久久久一二三区| 91行情网站电视在线观看高清版| 日韩成人一级大片| 成人一级片在线观看| 久久综合久久综合九色| 麻豆精品一区二区综合av| 91久久精品日日躁夜夜躁欧美| 一区二区三区中文在线| 欧美精品日韩精品| 国产成人av影院| 亚洲国产精品久久人人爱| 欧美一区二区私人影院日本| 国产高清精品在线| 视频一区二区不卡| 亚洲影视在线播放| 久久爱www久久做| 成人国产精品免费网站| 日韩一区二区免费在线电影| 不卡大黄网站免费看| 亚洲欧洲精品成人久久奇米网| 亚洲在线成人精品| 欧美视频在线播放| 成人h动漫精品一区二区| 免费成人小视频| 一区二区三区四区视频精品免费 | 久草中文综合在线| 婷婷开心激情综合| 亚洲欧美日韩系列| 国产精品视频一二三| 久久久三级国产网站| 日韩欧美一级特黄在线播放| 欧美视频你懂的| 在线观看欧美精品| 色八戒一区二区三区| 99热99精品| 成人午夜在线免费| 国产成人日日夜夜| 国产一区二区三区综合 | 久久众筹精品私拍模特| 欧美一区二区视频在线观看| 欧美日韩一区二区三区高清| 色域天天综合网| www.欧美色图| 成人h动漫精品一区二| www.av亚洲| 99re在线精品| 日本韩国一区二区三区| 欧美视频三区在线播放| 欧美日韩成人高清| 日韩一级精品视频在线观看| 欧美一区二区在线播放| 精品国产一区二区在线观看| 欧美精品一区二区久久久| 久久久精品一品道一区| 欧美经典一区二区| 亚洲少妇中出一区| 伊人色综合久久天天| 偷拍一区二区三区| 久久激情五月婷婷| 成人在线视频首页| 欧美色老头old∨ideo| 欧美高清你懂得| 国产日韩欧美一区二区三区综合| 国产欧美精品在线观看| 一区二区三区中文字幕| 日韩在线卡一卡二| 国产91富婆露脸刺激对白| 色婷婷久久综合| 精品理论电影在线| 中文字幕欧美一| 日日夜夜精品免费视频| 成人网在线免费视频| 欧美午夜电影网| 久久免费午夜影院| 亚洲综合色成人| 国产一区二区在线观看免费 | 亚洲综合一区二区三区| 日韩电影免费在线看| 成人免费毛片a| 欧美日韩一卡二卡三卡 | 色婷婷综合久久久久中文| 欧美一区在线视频| 亚洲欧美经典视频| 国产一区二区中文字幕| 在线精品国精品国产尤物884a| 久久先锋影音av鲁色资源网|