웹의dao 템플릿

8851 단어 DAOWebBean
자세히 보기
 web                    dao         dao      
 

, , dao dao  

basedao    






public interface DAO {
	/**
	 *       
	 * @param entityClass    
	 * @return
	 */
	public  long getCount(Class entityClass);
	/**
	 *          
	 */
	public void clear();
	/**
	 *     
	 * @param entity   id
	 */
	public void save(Object entity);
	/**
	 *     
	 * @param entity   id
	 */
	public void update(Object entity);
	/**
	 *     
	 * @param entityClass    
	 * @param entityid   id
	 */
	public  void delete(Class entityClass, Object entityid);
	/**
	 *     
	 * @param entityClass    
	 * @param entityids   id  
	 */
	public  void delete(Class entityClass, Object[] entityids);
	/**
	 *     
	 * @param 
	 * @param entityClass    
	 * @param entityId   id
	 * @return
	 */
	public  T find(Class entityClass, Object entityId);
	/**
	 *       
	 * @param 
	 * @param entityClass    
	 * @param firstindex     
	 * @param maxresult         
	 * @return
	 */
	public  QueryResult getScrollData(Class entityClass, int firstindex, int maxresult
			, String wherejpql, Object[] queryParams,LinkedHashMap orderby);
	
	public  QueryResult getScrollData(Class entityClass, int firstindex, int maxresult
			, String wherejpql, Object[] queryParams);
	
	public  QueryResult getScrollData(Class entityClass, int firstindex, int maxresult
			, LinkedHashMap orderby);
	
	public  QueryResult getScrollData(Class entityClass, int firstindex, int maxresult);
	
	public  QueryResult getScrollData(Class entityClass);
}

daoSuport은 jb를 결합시킨다.0은 일반형으로 쓴다


import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.LinkedHashMap;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.itcast.bean.QueryResult;

@Transactional
public abstract class DaoSupport implements DAO{
	@PersistenceContext protected EntityManager em;
	
	public void clear(){
		em.clear();
	}

	public  void delete(Class entityClass,Object entityid) {
		delete(entityClass, new Object[]{entityid});
	}

	public  void delete(Class entityClass,Object[] entityids) {
		for(Object id : entityids){
			em.remove(em.getReference(entityClass, id));
		}
	}
	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
	public  T find(Class entityClass, Object entityId) {
		return em.find(entityClass, entityId);
	}

	public void save(Object entity) {
		em.persist(entity);
	}
	
	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
	public  long getCount(Class entityClass) {
		return (Long)em.createQuery("select count("+ getCountField(entityClass) +") from "+ getEntityName(entityClass)+ " o").getSingleResult();
	}
	
	public void update(Object entity) {
		em.merge(entity);
	}
	
	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
	public  QueryResult getScrollData(Class entityClass,
			int firstindex, int maxresult, LinkedHashMap orderby) {
		return getScrollData(entityClass,firstindex,maxresult,null,null,orderby);
	}
	
	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
	public  QueryResult getScrollData(Class entityClass,
			int firstindex, int maxresult, String wherejpql, Object[] queryParams) {
		return getScrollData(entityClass,firstindex,maxresult,wherejpql,queryParams,null);
	}
	
	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
	public  QueryResult getScrollData(Class entityClass, int firstindex, int maxresult) {
		return getScrollData(entityClass,firstindex,maxresult,null,null,null);
	}
	
	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
	public  QueryResult getScrollData(Class entityClass) {
		return getScrollData(entityClass, -1, -1);
	}

	@SuppressWarnings("unchecked")
	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
	public  QueryResult getScrollData(Class entityClass, int firstindex, int maxresult
			, String wherejpql, Object[] queryParams,LinkedHashMap orderby) {
		QueryResult qr = new QueryResult();
		String entityname = getEntityName(entityClass);
		Query query = em.createQuery("select o from "+ entityname+ " o "+(wherejpql==null? "": "where "+ wherejpql)+ buildOrderby(orderby));
		setQueryParams(query, queryParams);
		if(firstindex!=-1 && maxresult!=-1) query.setFirstResult(firstindex).setMaxResults(maxresult);
		qr.setResultlist(query.getResultList());
		query = em.createQuery("select count("+ getCountField(entityClass)+ ") from "+ entityname+ " o "+(wherejpql==null? "": "where "+ wherejpql));
		setQueryParams(query, queryParams);
		qr.setTotalrecord((Long)query.getSingleResult());
		return qr;
	}
	
	protected void setQueryParams(Query query, Object[] queryParams){
		if(queryParams!=null && queryParams.length>0){
			for(int i=0; i orderby){
		StringBuffer orderbyql = new StringBuffer("");
		if(orderby!=null && orderby.size()>0){
			orderbyql.append(" order by ");
			for(String key : orderby.keySet()){
				orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");
			}
			orderbyql.deleteCharAt(orderbyql.length()-1);
		}
		return orderbyql.toString();
	}
	/**
	 *        
	 * @param 
	 * @param entityClass    
	 * @return
	 */
	protected  String getEntityName(Class entityClass){
		String entityname = entityClass.getSimpleName();
		Entity entity = entityClass.getAnnotation(Entity.class);
		if(entity.name()!=null && !"".equals(entity.name())){
			entityname = entity.name();
		}
		return entityname;
	}
	
	protected  String getCountField(Class clazz){
		String out = "o";
		try {
			PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
			for(PropertyDescriptor propertydesc : propertyDescriptors){
				Method method = propertydesc.getReadMethod();
				if(method!=null && method.isAnnotationPresent(EmbeddedId.class)){					
					PropertyDescriptor[] ps = Introspector.getBeanInfo(propertydesc.getPropertyType()).getPropertyDescriptors();
					out = "o."+ propertydesc.getName()+ "." + (!ps[1].getName().equals("class")? ps[1].getName(): ps[0].getName());
					break;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
        return out;
	}
}


비즈니스 계층 서비스는 DaoSupport에서 상속된 모든 접근 방식을 지원합니다.

public class BrandServiceBean extends DaoSupport implements BrandService {

	@Override
	public void save(Object entity) {
		((Brand)entity).setCode(UUID.randomUUID().toString());
		super.save(entity);
	}
	
}

좋은 웹페이지 즐겨찾기