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(); } }