通用DAO设计(泛型方法)

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

public interface CommonDao {
	
    public <T extends Serializable> T save(T model);

    public <T extends Serializable> void saveOrUpdate(T model);
    
    public <T extends Serializable> void update(T model);
    
    public <T extends Serializable> void merge(T model);
    
    public <T extends Serializable> void delete(T model);

    public <T extends Serializable, PK extends Serializable> void delete(Class<T> entityClass, PK id);

    public <T extends Serializable, PK extends Serializable> T get(Class<T> entityClass, PK id);
    
    public <T extends Serializable> List<T> listAll(Class<T> entityClass);
    
}

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 org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component("commonDao")
public class CommonDaoImpl implements CommonDao {

	@Autowired
    @Qualifier("sessionFactory")
	private SessionFactory sessionFactory;

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }
    
	@Override
	public <T extends Serializable> T save(T model) {
		
		this.getSession().save(model);
        return model;
	}

	@Override
	public <T extends Serializable> void saveOrUpdate(T model) {
		
		this.getSession().saveOrUpdate(model);
	}

	@Override
	public <T extends Serializable> void update(T model) {
		
		this.getSession().update(model);
	}

	@Override
	public <T extends Serializable> void merge(T model) {

		this.getSession().merge(model);
	}

	@Override
	public <T extends Serializable> void delete(T model) {

		this.getSession().delete(model);
	}

	@Override
	public <T extends Serializable, PK extends Serializable> void delete(
			Class<T> entityClass, PK id) {

		this.getSession().delete(this.get(entityClass, id));
	}

	@Override
	@SuppressWarnings("unchecked")
	public <T extends Serializable, PK extends Serializable> T get(
			Class<T> entityClass, PK id) {

		return (T) this.getSession().get(entityClass, id);
	}

	@Override
	@SuppressWarnings("unchecked")
	public <T extends Serializable> List<T> listAll(Class<T> entityClass) {

		Criteria criteria = getSession().createCriteria(entityClass);
        return criteria.list();
	}
}

猜你喜欢

转载自jaesonchen.iteye.com/blog/2287148
今日推荐