SSH 통합: DAO 프레임워크(BaseDao)를 사용하여 DAO는 쓰지 않거나 적게 쓰므로 업무에 더욱 집중할 수 있습니다.

자세히 보기
여기에 BaseDao를 새로 만들어서 일반 Dao(예를 들어 UserDao)가 그것을 계승하도록 합니다. 이렇게 하면 일반 Dao는 아무것도 쓰지 않고 기본적인 삭제 수정 작업을 자동으로 실현할 수 있고 UserDao에서 방법을 확장할 수 있습니다.
BaseDao.java:
 
package com.kaishengit.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.kaishengit.util.ReflectUtil;

public class BaseDao {
	
	private SessionFactory sessionFactory;
	//Class>:     ,           ,   ,     Object
	private Class> entityClass;
	
	public BaseDao(){
		//new       ,    this     this
		entityClass = ReflectUtil.getGenericParameterType(this.getClass());
	}
	
	public void saveOrUpdate(T t){
		getSession().saveOrUpdate(t);
	}
	
	public void del(PK pk){
		getSession().delete(findById(pk));
	}
	
	public void del(T t){
		getSession().delete(t);
	}
	
	@SuppressWarnings("unchecked")
	public T findById(PK pk){
		return (T) getSession().get(entityClass, pk);
	}
	
	@SuppressWarnings("unchecked")
	public List findAll(){
		Criteria criteria = getSession().createCriteria(entityClass);
		return criteria.list();
	}
	
	@SuppressWarnings("unchecked")
	public List findByPage(int start,int count){
		Criteria criteria = getSession().createCriteria(entityClass);
		criteria.setFirstResult(start);
		criteria.setMaxResults(count);
		return criteria.list();
	}
	
	//get
	public Session getSession(){
		return sessionFactory.getCurrentSession();
	}
	
	//set
	@Autowired
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
	
	
}

 
반사를 통해 되돌아오는 실제 매개 변수화 유형 T
 
package com.kaishengit.util;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class ReflectUtil {
	public static Class> getGenericParameterType(Class> clazz){
		//     Class      ( 、  、      void)      Type。          ,    Type                      。
		Type type = clazz.getGenericSuperclass();
		//          :Collection
		ParameterizedType pt = (ParameterizedType) type;
		//                Type      。 
		Type[] types = pt.getActualTypeArguments();
		return (Class>) types[0];
	}
}

 
 
이렇게 하면 OK입니다. 저희가 Userdao를 새로 만들어서 계승하겠습니다. 그러면 Userdao는 자동으로 삭제 및 수정 기능을 가지게 됩니다. 흥분되지 않습니까? 안에 또 하나의 방법을 추가했습니다.
 
package com.kaishengit.dao;

import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import com.kaishengit.pojo.User;

@Repository
public class UserDao extends BaseDao{
	public User findByNameAndPassword(User user){
		String hql = "from User where username = ? and password = ?";
		Query query = getSession().createQuery(hql);
		query.setParameter(0, user.getUsername());
		query.setParameter(1, user.getPassword());
		return (User) query.uniqueResult();
	}
}

 

좋은 웹페이지 즐겨찾기