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

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

?? basedaoimpl.java

?? JEECMS是JavaEE版網站管理系統(Java Enterprise Edition Content Manage System)的簡稱。 基于java技術開發
?? 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一区二区三区免费野_久草精品视频
亚洲区小说区图片区qvod| 成人av资源站| 成人av在线资源网站| 色综合久久综合网| 久久影视一区二区| 亚洲精品免费在线播放| 韩国av一区二区| 欧美美女网站色| 亚洲免费在线看| 成人国产在线观看| 欧美精品一区二区三区蜜臀| 亚洲成a人v欧美综合天堂下载 | 91麻豆123| 久久久久久久久久久电影| 日韩精品一二三区| 欧美午夜一区二区三区| 亚洲视频在线观看三级| 国产成人av电影在线播放| 日韩欧美视频一区| 石原莉奈在线亚洲三区| 91论坛在线播放| 亚洲视频一区在线观看| 成人精品国产福利| 国产亚洲精品超碰| 久久国产精品第一页| 欧美一区二区三区人| 午夜一区二区三区视频| 色婷婷精品大在线视频| 亚洲免费观看在线观看| 91女神在线视频| 国产精品灌醉下药二区| 成人精品视频一区二区三区尤物| 国产欧美一区二区精品性| 国产精品中文字幕日韩精品 | 国产成人免费在线观看不卡| 久久这里只有精品6| 国产美女精品一区二区三区| 精品久久久久久无| 韩国午夜理伦三级不卡影院| 久久久精品tv| heyzo一本久久综合| 成人免费在线观看入口| 色哟哟一区二区在线观看| 一区二区三区精品视频| 欧美三级资源在线| 久久精品国产亚洲高清剧情介绍| 日韩免费在线观看| 国产一区视频在线看| 日韩一区欧美二区| 久久亚洲春色中文字幕久久久| 国产乱码精品1区2区3区| 国产日韩三级在线| 成人国产在线观看| 亚洲国产美女搞黄色| 日韩一区二区三区视频在线| 久久er99精品| 国产精品欧美一区二区三区| 色噜噜狠狠一区二区三区果冻| 亚洲观看高清完整版在线观看 | 久久久精品黄色| 91丨porny丨在线| 日本视频中文字幕一区二区三区| 精品伦理精品一区| 91在线精品一区二区| 日韩国产欧美三级| 国产精品剧情在线亚洲| 欧美日韩成人综合| 国产在线国偷精品产拍免费yy| 国产精品视频免费看| 欧美专区在线观看一区| 国产乱子伦一区二区三区国色天香 | 日韩国产成人精品| 国产亲近乱来精品视频| 在线视频欧美精品| 国产永久精品大片wwwapp | 日韩高清一级片| 国产精品你懂的在线欣赏| 欧美视频一区二区三区四区| 国产酒店精品激情| 亚洲1区2区3区视频| 国产欧美日本一区视频| 6080午夜不卡| 色综合色狠狠天天综合色| 久久国产人妖系列| 亚洲一区二区三区四区在线观看| 国产视频一区在线播放| 5566中文字幕一区二区电影| 色综合色综合色综合色综合色综合 | 精品理论电影在线| 欧美日产国产精品| 99精品视频一区二区三区| 久久精品国产99| 偷拍亚洲欧洲综合| 亚洲精品国产视频| 国产欧美一区二区在线| 日韩欧美国产系列| 欧美日韩成人综合天天影院 | 久久久久青草大香线综合精品| 欧美日韩国产色站一区二区三区| 成人h精品动漫一区二区三区| 国内成人免费视频| 麻豆国产91在线播放| 日韩av成人高清| 亚洲电影一级片| 一级精品视频在线观看宜春院| 中文字幕不卡的av| 亚洲一区在线观看网站| 依依成人综合视频| 亚洲精品写真福利| 亚洲美女屁股眼交3| 国产精品久久精品日日| 国产精品免费网站在线观看| 欧美激情一区二区三区全黄| 久久久久久久久蜜桃| 久久日韩精品一区二区五区| 精品国产91洋老外米糕| 久久在线免费观看| 国产日本亚洲高清| 国产精品国产三级国产普通话99 | 国产suv精品一区二区6| 成人小视频在线| 白白色 亚洲乱淫| 91免费观看国产| 欧美性大战久久| 欧美精品三级日韩久久| 67194成人在线观看| 精品免费国产二区三区 | 成人免费毛片嘿嘿连载视频| 懂色av中文字幕一区二区三区| 国产乱码精品一区二区三区忘忧草 | 国产精品久久久久影视| 亚洲天堂网中文字| 五月婷婷色综合| 久久国产剧场电影| 国产69精品一区二区亚洲孕妇| 99精品视频在线播放观看| 欧美无乱码久久久免费午夜一区| 5566中文字幕一区二区电影| 久久综合狠狠综合久久激情 | 日韩精品国产欧美| 韩国在线一区二区| av动漫一区二区| 欧美日本在线观看| 久久久久亚洲蜜桃| 一区二区欧美在线观看| 久草在线在线精品观看| 9i看片成人免费高清| 91精品国产综合久久精品| 国产亚洲综合性久久久影院| 一区二区高清免费观看影视大全| 麻豆国产精品777777在线| 99国产精品视频免费观看| 91精品国产综合久久精品图片 | 中文字幕av一区二区三区高| 一区二区三区欧美| 国产一区二区三区四区五区美女| 91色|porny| 2欧美一区二区三区在线观看视频| 综合色中文字幕| 免费不卡在线观看| 在线视频中文字幕一区二区| 久久久久久久综合| 亚洲在线视频网站| 激情av综合网| 北条麻妃国产九九精品视频| 欧美成人一区二区三区片免费 | 麻豆成人综合网| 国产一区不卡精品| 国产免费成人在线视频| 亚洲视频在线一区观看| 日本成人在线一区| 日本韩国精品在线| 日韩欧美一级精品久久| 亚洲视频一区在线| 亚洲动漫第一页| 91视频你懂的| 欧美成人a视频| 亚洲综合一区二区| av毛片久久久久**hd| 精品日韩欧美一区二区| 一区二区三区欧美在线观看| 青青草原综合久久大伊人精品| 91福利资源站| 国产欧美一区二区三区沐欲| 天堂一区二区在线| 欧美日韩一级片网站| 国产精品亲子乱子伦xxxx裸| 亚洲最新视频在线观看| 高清在线不卡av| 欧美一级久久久久久久大片| 亚洲视频一区在线| 国产精品一区二区三区四区 | 日本韩国欧美一区| 国产欧美综合在线| 精品一区二区三区免费| 欧美日韩精品是欧美日韩精品| 一色屋精品亚洲香蕉网站| 国产91精品露脸国语对白| 国产三级精品视频| 国产在线观看免费一区|