增删该查——baseDao

来源:互联网 发布:import java.util. 编辑:程序博客网 时间:2024/05/21 15:07
      对于mvc结构而言,Dao数据访问层必不可少,而每个项目中基本都有很多个模块,很多模块都涉及增删改查(curd),如何每个模块都去写增删改查的的代码,就工作效率太低,而且浪费时间空间,所以可以对共有的重复的curd代码进行抽取。
      以下为一个项目抽取的dao层
      接口
package com.mol.core.dao;import java.io.Serializable;import java.util.List;public interface IBaseDao<T> {//新增public void save(T t);//更新public void update(T t);//根据id删除public void delete(Serializable id);//用Serializable就不局限于使用int型id,也可以是String类型//根据id查找public T getById(Serializable id);//查找列表public List<T> list();}
        实现
package com.mol.core.dao.impl;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.List;import org.hibernate.Query;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.mol.core.dao.IBaseDao;//不能直接实例化,所以必须是抽象的public abstract class BaseDao<T> extends HibernateDaoSupport implementsIBaseDao<T> {Class<T> clazz;@SuppressWarnings("unchecked")public BaseDao(){//获取当前运行的父类的参数化类型Type type = this.getClass().getGenericSuperclass();//转换为参数化类型ParameterizedType pt =(ParameterizedType)type;//得到实际类型Type[] types = pt.getActualTypeArguments();clazz = (Class<T>) types[0];} @Overridepublic void save(T t) {getHibernateTemplate().save(t);}@Overridepublic void update(T t) {getHibernateTemplate().update(t);}@Overridepublic void delete(Serializable id) {getHibernateTemplate().delete(getById(id));}@Overridepublic T getById(Serializable id) {T t = getHibernateTemplate().get(clazz, id);return t;}@SuppressWarnings("unchecked")@Overridepublic List<T> list() {Query query = getSession().createQuery("from "+clazz.getSimpleName());List<T> list = query.list();return list;}}
接口的实现中实现了hibernateDaoSupport,这样就不用手动注入sessionFactory,而且hibernateDaoSupport中有getSessionFactory方法,可以获取sessionFactory。


0 0
原创粉丝点击