springMVC项目中整合BaseDao

来源:互联网 发布:东莞天行健网络怎么样 编辑:程序博客网 时间:2024/06/10 05:59

在spring+hibernate项目中,都会涉及到对数据库的crud操作,为了减少重复代码,抽取了BaseDao接口,具体实现如下:

BaseDao.java接口

package dao;import java.util.List;public interface BaseDao<T> {//  增    void add(T t);//  删    void delete(T t);//  改    void update(T t);//  查所有    List<T> list();//  通过id查    T find(Integer id);}

BaseDaoImpl.java实现类

package dao.impl;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.List;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import dao.BaseDao;import entity.Customer;public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {    private Class aclass;    //查询所有和根据id查询两个方法都需要具体的实体类,所以在构造方法中获取实际类型参数。    public BaseDaoImpl(){        Class clazz=this.getClass();        //获得运行类的父类的参数化类型BaseDaoImpl<Customer>        ParameterizedType ptype=(ParameterizedType) clazz.getGenericSuperclass();        //获得参数化类型中的实际类型参数<Customer>        Type types[] = ptype.getActualTypeArguments();        this.aclass=(Class) types[0];    }    @Override    public void add(T t) {        this.getHibernateTemplate().save(t);    }    @Override    public void delete(T t) {        this.getHibernateTemplate().delete(t);    }    @Override    public void update(T t) {        this.getHibernateTemplate().update(t);    }    //  不能直接写成this.getHibernateTemplate().find("from T")    @Override    public List<T> list() {        // TODO Auto-generated method stub        return (List<T>) this.getHibernateTemplate().find("from "+aclass.getSimpleName());    }    @Override    public T find(Integer id) {        // TODO Auto-generated method stub        return (T) this.getHibernateTemplate().get(aclass, id);    }}

CustomerDao接口,需要继承BaseDao接口,并传入实际类型参数Customer。

package dao;import java.util.List;import java.util.Map;import entity.Customer;import entity.PageBean;public interface CustomerDao extends BaseDao<Customer>{//  void add(Customer customer);//  List<Customer> list();//  Customer find(Integer cid);//  void update(Customer customer);//  void delete(Customer customer);}

CustomerDaoImpl实现类,并需要继承BaseDaoImpl。
因为BaseDaoImpl中继承了HibernateDaoSupport,所以CustomerDaoImpl直接继承BaseDaoImpl即可。

package dao.impl;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.hibernate.Query;import org.hibernate.SQLQuery;import org.hibernate.Session;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.transform.AliasToBeanResultTransformer;import org.hibernate.transform.Transformers;import org.springframework.orm.hibernate5.HibernateTemplate;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import dao.CustomerDao;import entity.Customer;import entity.PageBean;public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao {}
原创粉丝点击