SSH框架开发项目,经常要用到baseDao来封装相同的操作,这样可以省去很多不必要的代码,大大降低了开发的时间,以下的basedao模板,在很多企业项目开发中都是要用到的,而且都差不多相同,如果你把这个拿去放到自己的项目中,也是完全没有问题的。
baseDao接口,无非就是增删改查,因为这些操作是很多的,泛型千万不要漏了:
package cn.taotao.core.dao;
import java.io.Serializable;
import java.util.List;
public interface BaseDao<T> {
//新增
public void save(T entity);
//更新
public void update(T entity);
//删除
public void delete(Serializable id);
//根据id查询
public T findById(Serializable id);
//查询列表
public List<T> findObjects();
} 再看看ssh框架的baseDaoImpl实现类,最关键的部分:
package cn.taotao.core.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import cn.taotao.core.dao.BaseDao;
public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
Class<T> clazz;
/**获取当前类*/
@SuppressWarnings("unchecked")
public BaseDaoImpl(){
ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();//BaseDaoImpl<User>
clazz = (Class<T>)pt.getActualTypeArguments()[0];
}
/**获取session*/
public Session getCurrentSession(){
Session session = null;
try {
session = getSessionFactory().getCurrentSession();
} catch (HibernateException e) {
session = getSessionFactory().openSession();
}
return session;
}
@Override
public void update(T entity) {
this.getHibernateTemplate().update(entity);
}
@Override
public void save(T entity) {
this.getHibernateTemplate().save(entity);
}
@Override
public void delete(Serializable id) {
this.getHibernateTemplate().delete(findById(id));
}
@Override
public T findById(Serializable id) {
return this.getHibernateTemplate().get(clazz, id);
}
@Override
public List<T> findObjects() {
Session session = getCurrentSession();
Query query = session.createQuery("FROM " +clazz.getSimpleName());
return query.list();
}
}