springMVC项目中整合BaseDao

在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 {

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值