增删该查——baseDao

      对于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 implements
		IBaseDao<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];
	} 
	
	@Override
	public void save(T t) {
		getHibernateTemplate().save(t);
	}

	@Override
	public void update(T t) {
		getHibernateTemplate().update(t);
	}

	@Override
	public void delete(Serializable id) {
		getHibernateTemplate().delete(getById(id));
	}

	@Override
	public T getById(Serializable id) {
		T t = getHibernateTemplate().get(clazz, id);
		return t;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<T> list() {
		Query query = getSession().createQuery("from "+clazz.getSimpleName());
		List<T> list = query.list();
		return list;
	}

}
接口的实现中实现了hibernateDaoSupport,这样就不用手动注入sessionFactory,而且hibernateDaoSupport中有getSessionFactory方法,可以获取sessionFactory。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值