Hibernate 通用DAO類

來源:互聯網
上載者:User

標籤:des   java   os   io   for   cti   

1、通用介面類

package org.lzpeng.dao;import java.io.Serializable;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Query;import org.hibernate.criterion.Criterion;import org.springside.modules.orm.hibernate.Page;/** *  * @version 2009-1-10 * @author lzpeng *  */public interface IGenericDAO<T, PK extends Serializable> {public void save(T entity);public void delete(T entity);public void delete(PK id);public List<T> findAll();public Page<T> findAll(Page<T> page);/** * Gets the object by ID . */public T get(final PK id);/** * Press the HQL Query object list . *  * @param hql *            hqlStatement  * @param values *            Number of variable parameters  */public List find(String hql, Object... values);/** * Press the HQL query paging . No support for automatically gets the total number of results ,User further execution of the query . *  * @param page *            Paging parameters .Including the pageSize and firstResult . * @param hql *            hqlStatement . * @param values *            Number of variable parameters . *  * @return Paging query results ,Comes with a results list and all query parameters . */public Page<T> find(Page<T> page, String hql, Object... values);/** * Press the HQL query only object . */public Object findUnique(String hql, Object... values);/** * Press the HQL query results Intger class shape . */public Integer findInt(String hql, Object... values);/** * According to the results of the HQL Query type long . */public Long findLong(String hql, Object... values);/** * According to the Criterion query object list . *  * @param criterion *            Number of variable Criterion . */public List<T> findByCriteria(Criterion... criterion);/** * According to the Criterion paging query . *  * @param page *            Paging parameters .Including the pageSize, firstResult, orderBy, asc, autoCount . *            Where firstResult can be directly specified ,You can also specify pageNo . autoCountSpecifies whether dynamic gets total number of results . *  * @param criterion *            Number of variable Criterion . * @return Paging query results .Comes with a results list and all query parameters . */public Page<T> findByCriteria(Page page, Criterion... criterion);/** * Find a list of objects by property . */public List<T> findByProperty(String propertyName, Object value);/** * Find unique object by property . */public T findUniqueByProperty(String propertyName, Object value);/** * Depending on the query function and argument list to create a Query object ,Subsequent to processing ,The auxiliary function . */public Query createQuery(String queryString, Object... values);/** * According to the Criterion conditions create Criteria ,Subsequent to processing ,The auxiliary function . */public Criteria createCriteria(Criterion... criterions);/** * Determine the object‘s property value is unique within the database . *  */public boolean isPropertyUnique(String propertyName, Object newValue,Object orgValue);/** * Through this query count query to obtain the total number of objects . *  * @return pageThe totalCount property in the object is assigned . */public int countQueryResult(Page<T> page, Criteria c);}

2、擴充Hibernate提供的DAO實作類別

package org.lzpeng.dao.impl;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.util.ArrayList;import java.util.List;import org.hibernate.Criteria;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.Order;import org.hibernate.criterion.Projection;import org.hibernate.criterion.Projections;import org.hibernate.criterion.Restrictions;import org.hibernate.impl.CriteriaImpl;import org.hibernate.transform.ResultTransformer;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import org.springframework.util.Assert;import org.lzpeng.dao.IGenericDAO;import org.springside.modules.utils.BeanUtils;import org.springside.modules.orm.hibernate.Page;import org.springside.modules.orm.hibernate.QueryParameter;/** * HibernateOf the base class . * <p> * You can create a service class directly using the .Or it may inherit the DAO subclass  * </p> * Modified from Springside SimpleHibernateTemplate  *  * @param <T> *            DAOThe object type  * @param <PK> *            Primary key type  *  *  */@SuppressWarnings("unchecked")public class GenericDAOImpl<T, PK extends Serializable> extendsHibernateDaoSupport implements IGenericDAO<T, PK> {protected Logger logger = LoggerFactory.getLogger(getClass());protected SessionFactory sessionFactory;protected Session session;protected Class<?> entityClass;public GenericDAOImpl() {this.entityClass = (Class<?>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];}public GenericDAOImpl(SessionFactory sessionFactory, Class<T> entityClass) {super.setSessionFactory(sessionFactory);this.entityClass = entityClass;}public void save(T entity) {Assert.notNull(entity);super.getHibernateTemplate().saveOrUpdate(entity);logger.info("save entity: {}", entity);}public void delete(T entity) {Assert.notNull(entity);super.getHibernateTemplate().delete(entity);logger.info("delete entity: {}", entity);}public void delete(PK id) {Assert.notNull(id);delete(get(id));}public List<T> findAll() {return findByCriteria();}public Page<T> findAll(Page<T> page) {return findByCriteria(page);}public T get(final PK id) {if(super.getHibernateTemplate() == null){System.out.println("asdfasdf");}return (T) super.getHibernateTemplate().get(entityClass, id);}public List find(String hql, Object... values) {return createQuery(hql, values).list();}public Page<T> find(Page<T> page, String hql, Object... values) {Assert.notNull(page);if (page.isAutoCount()) {logger.warn("HQLQueries are not supported automatically gets the total number of results ,hqlAs {}", hql);}Query q = createQuery(hql, values);if (page.isFirstSetted()) {q.setFirstResult(page.getFirst());}if (page.isPageSizeSetted()) {q.setMaxResults(page.getPageSize());}page.setResult(q.list());return page;}/** * Press the HQL query only object . */public Object findUnique(String hql, Object... values) {return createQuery(hql, values).uniqueResult();}public Integer findInt(String hql, Object... values) {return (Integer) findUnique(hql, values);}public Long findLong(String hql, Object... values) {return (Long) findUnique(hql, values);}public List<T> findByCriteria(Criterion... criterion) {return createCriteria(criterion).list();}public Page<T> findByCriteria(Page page, Criterion... criterion) {Assert.notNull(page);Criteria c = createCriteria(criterion);if (page.isAutoCount()) {page.setTotalCount(countQueryResult(page, c));}if (page.isFirstSetted()) {c.setFirstResult(page.getFirst());}if (page.isPageSizeSetted()) {c.setMaxResults(page.getPageSize());}if (page.isOrderBySetted()) {if (page.getOrder().endsWith(QueryParameter.ASC)) {c.addOrder(Order.asc(page.getOrderBy()));} else {c.addOrder(Order.desc(page.getOrderBy()));}}page.setResult(c.list());return page;}/** * Find a list of objects by property . */public List<T> findByProperty(String propertyName, Object value) {Assert.hasText(propertyName);return createCriteria(Restrictions.eq(propertyName, value)).list();}public T findUniqueByProperty(String propertyName, Object value) {Assert.hasText(propertyName);return (T) createCriteria(Restrictions.eq(propertyName, value)).uniqueResult();}public Query createQuery(String queryString, Object... values) { Assert.hasText(queryString); super.getSession().createQuery(queryString);Query queryObject = super.getSession().createQuery(queryString);if (values != null) {for (int i = 0; i < values.length; i++) {queryObject.setParameter(i, values[i]);}}return queryObject;}public Criteria createCriteria(Criterion... criterions) {Criteria criteria = super.getSession().createCriteria(entityClass);for (Criterion c : criterions) {criteria.add(c);}return criteria;}public boolean isPropertyUnique(String propertyName, Object newValue,Object orgValue) {if (newValue == null || newValue.equals(orgValue))return true;Object object = findUniqueByProperty(propertyName, newValue);return (object == null);}public int countQueryResult(Page<T> page, Criteria c) {CriteriaImpl impl = (CriteriaImpl) c;// First Projection, ResultTransformer, OrderBy out ,Empty after a three Count operations Projection projection = impl.getProjection();ResultTransformer transformer = impl.getResultTransformer();List<CriteriaImpl.OrderEntry> orderEntries = null;try {orderEntries = (List) BeanUtils.getFieldValue(impl, "orderEntries");BeanUtils.setFieldValue(impl, "orderEntries", new ArrayList());} catch (Exception e) {logger.error("Not may throw an exception :{}", e.getMessage());}// Do Count query int totalCount = (Integer) c.setProjection(Projections.rowCount()).uniqueResult();if (totalCount < 1)return -1;// Will the Projection and OrderBy before conditions back to go back c.setProjection(projection);if (projection == null) {c.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);}if (transformer != null) {c.setResultTransformer(transformer);}try {BeanUtils.setFieldValue(impl, "orderEntries", orderEntries);} catch (Exception e) {logger.error("Not may throw an exception :{}", e.getMessage());}return totalCount;}}


1.直接被用於服務類中()GenericDAOImpl<User, Integer> userDAO = new GenericDAOImpl<User, Integer>(sessionFactory, User.class);2.繼承一個DAO介面( )interface IUserDAO extends IGenericDAO<User, Integer>class UserDAOImpl extends GenericDAOImpl<User, Integer> implements IUserDAO



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.