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

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

?? basedaoimpl.java

?? JAVA做的CMS源碼
?? JAVA
字號:
package com.ponyjava.common.hibernate3;

import static org.hibernate.EntityMode.POJO;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Example.PropertySelector;
import org.hibernate.impl.CriteriaImpl;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.transform.ResultTransformer;
import org.hibernate.type.Type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.util.Assert;

import com.ponyjava.common.page.Pagination;
import com.ponyjava.common.util.MyBeanUtils;

/**
 * DAO基類。
 * 
 * 提供hql分頁查詢,example分頁查詢,拷貝更新等功能。
 * 
 * @author liufang
 * 
 * @param <T>
 */
@Repository
public abstract class BaseDaoImpl<T extends Serializable> implements BaseDao<T> {
	protected Logger log = LoggerFactory.getLogger(getClass());

	protected SessionFactory sessionFactory;

	@Autowired
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	protected Session getSession() {
		return sessionFactory.getCurrentSession();
	}

	public T save(T entity) {
		Assert.notNull(entity);
		getSession().save(entity);
		return entity;
	}

	public Object update(Object entity) {
		Assert.notNull(entity);
		getSession().update(entity);
		return entity;
	}

	public Object saveOrUpdate(Object entity) {
		Assert.notNull(entity);
		getSession().saveOrUpdate(entity);
		return entity;
	}

	public Object merge(Object entity) {
		Assert.notNull(entity);
		return getSession().merge(entity);
	}

	public void delete(Object entity) {
		Assert.notNull(entity);
		getSession().delete(entity);
	}

	public T deleteById(Serializable id) {
		Assert.notNull(id);
		T entity = load(id);
		getSession().delete(entity);
		return entity;
	}

	public T load(Serializable id) {
		Assert.notNull(id);
		return load(id, false);
	}

	@SuppressWarnings("unchecked")
	public T get(Serializable id) {
		Assert.notNull(id);
		return (T) getSession().get(getPersistentClass(), id);
	}

	@SuppressWarnings("unchecked")
	public T load(Serializable id, boolean lock) {
		Assert.notNull(id);
		T entity = null;
		if (lock) {
			entity = (T) getSession().load(getPersistentClass(), id,
					LockMode.UPGRADE);
		} else {
			entity = (T) getSession().load(getPersistentClass(), id);
		}
		return entity;
	}

	public List<T> findAll() {
		return findByCriteria();
	}

	@SuppressWarnings("unchecked")
	public List<T> findAll(OrderBy... orders) {
		Criteria crit = createCriteria();
		if (orders != null) {
			for (OrderBy order : orders) {
				crit.addOrder(order.getOrder());
			}
		}
		return crit.list();
	}

	public Pagination findAll(int pageNo, int pageSize, OrderBy... orders) {
		Criteria crit = createCriteria();
		return findByCriteria(crit, pageNo, pageSize, null, OrderBy
				.asOrders(orders));
	}

	/**
	 * 按HQL查詢對象列表.
	 * 
	 * @param hql
	 *            hql語句
	 * @param values
	 *            數量可變的參數
	 */
	@SuppressWarnings("unchecked")
	protected List find(String hql, Object... values) {
		return createQuery(hql, values).list();
	}

	/**
	 * 按HQL查詢唯一對象.
	 */
	protected Object findUnique(String hql, Object... values) {
		return createQuery(hql, values).uniqueResult();
	}

	/**
	 * 按屬性查找對象列表.
	 */
	@SuppressWarnings("unchecked")
	public List<T> findByProperty(String propertyName, Object value) {
		Assert.hasText(propertyName);
		return createCriteria(Restrictions.eq(propertyName, value)).list();
	}

	/**
	 * 按屬性查找唯一對象.
	 */
	@SuppressWarnings("unchecked")
	public T findUniqueByProperty(String propertyName, Object value) {
		Assert.hasText(propertyName);
		return (T) createCriteria(Restrictions.eq(propertyName, value))
				.uniqueResult();
	}

	@SuppressWarnings("unchecked")
	protected Pagination find(Finder finder, int pageNo, int pageSize) {
		int totalCount = countQueryResult(finder);
		Pagination p = new Pagination(pageNo, pageSize, totalCount);
		if (totalCount < 1) {
			p.setList(new ArrayList());
			return p;
		}
		Query query = getSession().createQuery(finder.getOrigHql());
		finder.setParamsToQuery(query);
		query.setFirstResult(p.getFirstResult());
		query.setMaxResults(p.getPageSize());
		List list = query.list();
		p.setList(list);
		return p;
	}

	@SuppressWarnings("unchecked")
	protected List find(Finder finder) {
		Query query = getSession().createQuery(finder.getOrigHql());
		finder.setParamsToQuery(query);
		query.setFirstResult(finder.getFirstResult());
		if (finder.getMaxResults() > 0) {
			query.setMaxResults(finder.getMaxResults());
		}
		List list = query.list();
		return list;
	}

	@SuppressWarnings("unchecked")
	public List<T> findByEgList(T eg, boolean anyWhere, Condition[] conds,
			String... exclude) {
		Criteria crit = getCritByEg(eg, anyWhere, conds, exclude);
		return crit.list();
	}

	@SuppressWarnings("unchecked")
	public List<T> findByEgList(T eg, boolean anyWhere, Condition[] conds,
			int firstResult, int maxResult, String... exclude) {
		Criteria crit = getCritByEg(eg, anyWhere, conds, exclude);
		crit.setFirstResult(firstResult);
		crit.setMaxResults(maxResult);
		return crit.list();
	}

	public Pagination findByEg(T eg, boolean anyWhere, Condition[] conds,
			int page, int pageSize, String... exclude) {
		Order[] orderArr = null;
		Condition[] condArr = null;
		if (conds != null && conds.length > 0) {
			List<Order> orderList = new ArrayList<Order>();
			List<Condition> condList = new ArrayList<Condition>();
			for (Condition c : conds) {
				if (c instanceof OrderBy) {
					orderList.add(((OrderBy) c).getOrder());
				} else {
					condList.add(c);
				}
			}
			orderArr = new Order[orderList.size()];
			condArr = new Condition[condList.size()];
			orderArr = orderList.toArray(orderArr);
			condArr = condList.toArray(condArr);
		}
		Criteria crit = getCritByEg(eg, anyWhere, condArr, exclude);
		return findByCriteria(crit, page, pageSize, null, orderArr);
	}

	/**
	 * 根據查詢函數與參數列表創建Query對象,后續可進行更多處理,輔助函數.
	 */
	protected Query createQuery(String queryString, Object... values) {
		Assert.hasText(queryString);
		Query queryObject = getSession().createQuery(queryString);
		if (values != null) {
			for (int i = 0; i < values.length; i++) {
				queryObject.setParameter(i, values[i]);
			}
		}
		return queryObject;
	}

	/**
	 * 按Criterion查詢對象列表.
	 * 
	 * @param criterion
	 *            數量可變的Criterion.
	 */
	@SuppressWarnings("unchecked")
	protected List<T> findByCriteria(Criterion... criterion) {
		return createCriteria(criterion).list();
	}

	@SuppressWarnings("unchecked")
	protected Pagination findByCriteria(Criteria crit, int pageNo,
			int pageSize, Projection projection, Order... orders) {
		int totalCount = ((Number) crit.setProjection(Projections.rowCount())
				.uniqueResult()).intValue();
		Pagination p = new Pagination(pageNo, pageSize, totalCount);
		if (totalCount < 1) {
			p.setList(new ArrayList());
			return p;
		}
		crit.setProjection(projection);
		if (projection == null) {
			crit.setResultTransformer(Criteria.ROOT_ENTITY);
		}
		if (orders != null) {
			for (Order order : orders) {
				crit.addOrder(order);
			}
		}
		crit.setFirstResult(p.getFirstResult());
		crit.setMaxResults(p.getPageSize());
		p.setList(crit.list());
		return p;
	}

	/**
	 * 通過count查詢獲得本次查詢所能獲得的對象總數.
	 * 
	 * @param finder
	 * @return
	 */
	protected int countQueryResult(Finder finder) {
		Query query = getSession().createQuery(finder.getRowCountHql());
		finder.setParamsToQuery(query);
		return ((Number) query.iterate().next()).intValue();
	}

	/**
	 * 通過count查詢獲得本次查詢所能獲得的對象總數.
	 * 
	 * @return page對象中的totalCount屬性將賦值.
	 */
	@SuppressWarnings("unchecked")
	protected int countQueryResult(Criteria c) {
		CriteriaImpl impl = (CriteriaImpl) c;
		// 先把Projection、ResultTransformer、OrderBy取出來,清空三者后再執行Count操作
		Projection projection = impl.getProjection();
		ResultTransformer transformer = impl.getResultTransformer();
		List<CriteriaImpl.OrderEntry> orderEntries = null;
		try {
			orderEntries = (List) MyBeanUtils.getFieldValue(impl,
					"orderEntries");
			MyBeanUtils.setFieldValue(impl, "orderEntries", new ArrayList());
		} catch (Exception e) {
			log.error("不可能拋出的異常:{}", e.getMessage());
		}
		// 執行Count查詢
		int totalCount = (Integer) c.setProjection(Projections.rowCount())
				.uniqueResult();
		if (totalCount < 1) {
			return 0;
		}
		// 將之前的Projection和OrderBy條件重新設回去
		c.setProjection(projection);
		if (projection == null) {
			c.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
		}
		if (transformer != null) {
			c.setResultTransformer(transformer);
		}
		try {
			MyBeanUtils.setFieldValue(impl, "orderEntries", orderEntries);
		} catch (Exception e) {
			log.error("不可能拋出的異常:{}", e.getMessage());
		}
		return totalCount;
	}

	protected Criteria getCritByEg(T bean, boolean anyWhere, Condition[] conds,
			String... exclude) {
		Criteria crit = getSession().createCriteria(getPersistentClass());
		Example example = Example.create(bean);
		example.setPropertySelector(NOT_BLANK);
		if (anyWhere) {
			example.enableLike(MatchMode.ANYWHERE);
			example.ignoreCase();
		}
		for (String p : exclude) {
			example.excludeProperty(p);
		}
		crit.add(example);
		// 處理排序和is null字段
		if (conds != null) {
			for (Condition o : conds) {
				if (o instanceof OrderBy) {
					OrderBy order = (OrderBy) o;
					crit.addOrder(order.getOrder());
				} else if (o instanceof Nullable) {
					Nullable isNull = (Nullable) o;
					if (isNull.isNull()) {
						crit.add(Restrictions.isNull(isNull.getField()));
					} else {
						crit.add(Restrictions.isNotNull(isNull.getField()));
					}
				} else {
					// never
				}
			}
		}
		// 處理many to one查詢
		ClassMetadata cm = getCmd(bean.getClass());
		String[] fieldNames = cm.getPropertyNames();
		for (String field : fieldNames) {
			Object o = cm.getPropertyValue(bean, field, POJO);
			if (o == null) {
				continue;
			}
			ClassMetadata subCm = getCmd(o.getClass());
			if (subCm == null) {
				continue;
			}
			Serializable id = subCm.getIdentifier(o, POJO);
			if (id != null) {
				Serializable idName = subCm.getIdentifierPropertyName();
				crit.add(Restrictions.eq(field + "." + idName, id));
			} else {
				crit.createCriteria(field).add(Example.create(o));
			}
		}
		return crit;
	}

	public void refresh(Object entity) {
		getSession().refresh(entity);
	}

	public Object updateDefault(Object entity) {
		return updateByUpdater(Updater.create(entity));
	}

	public Object updateByUpdater(Updater updater) {
		ClassMetadata cm = getCmd(updater.getBean().getClass());
		if (cm == null) {
			throw new RuntimeException("所更新的對象沒有映射或不是實體對象");
		}
		Object bean = updater.getBean();
		Object po = getSession().load(bean.getClass(),
				cm.getIdentifier(bean, POJO));
		updaterCopyToPersistentObject(updater, po);
		return po;
	}

	/**
	 * 將更新對象拷貝至實體對象,并處理many-to-one的更新。
	 * 
	 * @param updater
	 * @param po
	 */
	@SuppressWarnings("unchecked")
	private void updaterCopyToPersistentObject(Updater updater, Object po) {
		Map map = MyBeanUtils.describe(updater.getBean());
		Set<Map.Entry<String, Object>> set = map.entrySet();
		for (Map.Entry<String, Object> entry : set) {
			String name = entry.getKey();
			Object value = entry.getValue();
			if (!updater.isUpdate(name, value)) {
				continue;
			}
			if (value != null) {
				Class valueClass = value.getClass();
				ClassMetadata cm = getCmd(valueClass);
				if (cm != null) {
					Serializable vid = cm.getIdentifier(value, POJO);
					// 如果更新的many to one的對象的id為空,則將many to one設置為null。
					if (vid != null) {
						value = getSession().load(valueClass, vid);
					} else {
						value = null;
					}
				}
			}
			try {
				PropertyUtils.setProperty(po, name, value);
			} catch (Exception e) {
				// never
				log.warn("更新對象時,拷貝屬性異常", e);
			}
		}
	}

	/**
	 * 根據Criterion條件創建Criteria,后續可進行更多處理,輔助函數.
	 */
	protected Criteria createCriteria(Criterion... criterions) {
		Criteria criteria = getSession().createCriteria(getPersistentClass());
		for (Criterion c : criterions) {
			criteria.add(c);
		}
		return criteria;
	}

	private Class<T> persistentClass;

	@SuppressWarnings("unchecked")
	public BaseDaoImpl() {
		this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
				.getGenericSuperclass()).getActualTypeArguments()[0];
	}

	public Class<T> getPersistentClass() {
		return persistentClass;
	}

	public T createNewEntiey() {
		try {
			return getPersistentClass().newInstance();
		} catch (Exception e) {
			throw new RuntimeException("不能創建實體對象:"
					+ getPersistentClass().getName());
		}
	}

	@SuppressWarnings("unchecked")
	private ClassMetadata getCmd(Class clazz) {
		return (ClassMetadata) sessionFactory.getClassMetadata(clazz);
	}

	public static final NotBlankPropertySelector NOT_BLANK = new NotBlankPropertySelector();

	/**
	 * 不為空的EXAMPLE屬性選擇方式
	 * 
	 * @author liufang
	 * 
	 */
	static final class NotBlankPropertySelector implements PropertySelector {
		private static final long serialVersionUID = 1L;

		public boolean include(Object object, String propertyName, Type type) {
			return object != null
					&& !(object instanceof String && StringUtils
							.isBlank((String) object));
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产综合一区二区三区 | 欧美久久久久久蜜桃| 国产69精品一区二区亚洲孕妇| 亚洲图片有声小说| 国产精品国产三级国产普通话99| 久久日韩精品一区二区五区| 欧美老人xxxx18| 在线观看一区二区视频| 成人av电影免费在线播放| 国产成人在线影院| 久久se这里有精品| 裸体一区二区三区| 欧美aaa在线| 青青草视频一区| 亚洲一区二区av电影| 亚洲欧美国产三级| 亚洲欧洲性图库| 欧美精品一区二区三区四区| 欧美欧美欧美欧美| 欧美电影一区二区| 欧美精品丝袜久久久中文字幕| 欧美日本乱大交xxxxx| 久久在线观看免费| 久久久亚洲欧洲日产国码αv| 欧美不卡一区二区| 67194成人在线观看| 日韩无一区二区| 91精品国产综合久久香蕉的特点| 欧美欧美午夜aⅴ在线观看| 欧美日韩在线三级| 欧美一区二区精品久久911| 日韩欧美三级在线| 欧美精品一区二| 国产嫩草影院久久久久| 国产精品久久久久一区二区三区共| 久久人人超碰精品| 在线观看欧美日本| 中文字幕高清不卡| 国产精品欧美极品| 亚洲精品欧美在线| 亚洲18影院在线观看| 日韩影院免费视频| 韩国精品在线观看| 成人动漫视频在线| 国产成人免费在线| jizzjizzjizz欧美| 欧美在线你懂的| 欧美日韩一区国产| 精品久久一二三区| 国产欧美一区二区在线观看| 国产精品国产a| 亚洲va天堂va国产va久| 丝袜a∨在线一区二区三区不卡| 亚洲高清免费观看| 日韩制服丝袜先锋影音| 毛片av一区二区三区| 九九**精品视频免费播放| 久久国产视频网| av成人老司机| 欧美一区二区久久久| 欧美日本在线播放| 成人欧美一区二区三区1314| 中文字幕亚洲在| 精品欧美一区二区在线观看| 日本一二三四高清不卡| 亚洲丝袜另类动漫二区| 日本免费新一区视频| 91丨porny丨蝌蚪视频| 2014亚洲片线观看视频免费| 婷婷综合在线观看| 日本乱人伦一区| 欧美国产在线观看| 美美哒免费高清在线观看视频一区二区 | 欧美午夜一区二区三区| 日本一区二区三区高清不卡| 欧美aⅴ一区二区三区视频| 日本伦理一区二区| 中文字幕一区二区三区视频 | 欧美一区二区视频在线观看2022| 国产精品短视频| 国产成人免费在线视频| 日韩精品一区国产麻豆| 日韩**一区毛片| 欧美日韩综合在线免费观看| 亚洲欧美一区二区视频| 成人免费视频一区| 久久久久久久网| 久久99久国产精品黄毛片色诱| 欧美精品欧美精品系列| 亚洲综合精品自拍| 91在线视频播放| 国产偷国产偷精品高清尤物| 美女视频黄频大全不卡视频在线播放| 色婷婷av一区二区三区之一色屋| 国产精品乱码一区二区三区软件| 国产精品中文字幕日韩精品| 欧美第一区第二区| 久久国产精品色| 精品国产乱码久久久久久免费| 免费在线看成人av| 日韩一级视频免费观看在线| 日韩国产一区二| 欧美一区二区三区视频免费| 日本中文字幕一区二区有限公司| 51精品秘密在线观看| 午夜精品福利一区二区三区蜜桃| 欧美男人的天堂一二区| 亚洲午夜影视影院在线观看| 欧美亚日韩国产aⅴ精品中极品| 一区二区高清在线| 欧美视频自拍偷拍| 亚洲国产一区二区在线播放| 欧美剧情片在线观看| 日本成人在线一区| 91精品国产综合久久久久久| 久久99热这里只有精品| 久久影视一区二区| 国产精品99久久久久久宅男| 欧美高清一级片在线观看| voyeur盗摄精品| 亚洲欧美成aⅴ人在线观看| 欧美综合亚洲图片综合区| 亚洲高清免费视频| 欧美大胆人体bbbb| 国产精品系列在线观看| 亚洲视频网在线直播| 91国偷自产一区二区三区成为亚洲经典 | 国产凹凸在线观看一区二区| 欧美激情综合在线| 91在线你懂得| 丝瓜av网站精品一区二区| 欧美成人精品高清在线播放| 国产传媒日韩欧美成人| 日韩美女视频一区二区| 777奇米四色成人影色区| 精彩视频一区二区| 国产精品高潮呻吟久久| 欧美日韩一区二区三区免费看| 蜜臀av亚洲一区中文字幕| 久久久久9999亚洲精品| 91小视频在线观看| 午夜欧美电影在线观看| 久久精品视频网| 欧美性感一区二区三区| 日本美女一区二区| 中文字幕不卡三区| 欧美日韩一区二区在线视频| 韩国三级中文字幕hd久久精品| 亚洲久草在线视频| 日韩欧美在线观看一区二区三区| 成熟亚洲日本毛茸茸凸凹| 亚洲高清在线精品| 久久久.com| 在线成人av网站| 成人午夜碰碰视频| 亚洲国产中文字幕在线视频综合| 久久奇米777| 欧美精品久久99| 99精品在线观看视频| 久久se精品一区二区| 亚洲一区二区三区小说| 久久久久久一二三区| 欧美视频一区二| 成人动漫视频在线| 精品无人码麻豆乱码1区2区| 一区二区免费看| 国产精品理论在线观看| 91精品国产一区二区三区| 91美女蜜桃在线| 国产精品亚洲午夜一区二区三区| 亚洲一二三四在线| 中文字幕精品—区二区四季| 日韩欧美一二区| 欧美午夜寂寞影院| 99re免费视频精品全部| 激情文学综合网| 日韩在线观看一区二区| 亚洲欧美日韩系列| 日本一区二区免费在线观看视频 | 麻豆极品一区二区三区| 亚洲精品一二三区| 久久久www成人免费毛片麻豆| 欧美妇女性影城| 欧美综合久久久| 99久久夜色精品国产网站| 国产高清不卡一区| 精品一区二区三区久久久| 三级久久三级久久久| 亚洲尤物视频在线| 综合在线观看色| 久久久久久久综合狠狠综合| 日韩久久久精品| 在线电影国产精品| 欧美午夜寂寞影院| 在线亚洲一区二区| 日本高清无吗v一区| 91视视频在线观看入口直接观看www | 88在线观看91蜜桃国自产| 91福利小视频| 成人av在线网|