提取出Dao中公共的部分BaseDao
BaseDao与BaseDaoImpl 在这里,就不说BaseDao了,就直接来说BaseDaoImpl,直接说出BaseDao中方法的实现。在mvc的开发模式中,在dao中,有很多基础类的方法,比如说:最基本的增删改查CRUD的操作,(create read update delete)这些基本的操作,就没有在各个DAO中写出来了,直接提取出来就行了。 这里,在操作数据的时候需要session,通过sessionFactory中获取,如何在BaseDaoImpl中获取sessionFactory,这里,我个人喜欢用注解的方式。 @Transactional 在这里为什么将事务注入到这里,是因为在中小项目中,通常将dao和service层合并了,每个service都要用到Transactional,这里在父类中注入了,后面就不用书写了。 public class BaseDaoImpl<T> implements BaseDao<T>{ @Resource private SessionFactory sessionFactory; private Class<T> clazz; public BaseDaoImpl(){ ParameterizedType pt = (Parameterized) this.class().getGenericSuperclass(); //这里的说明,我在上一篇文章已经说明了 clazz = (Class) pt.getActualTypeArguments()[0]; System.out.println("---------->class = "+clazz ); } //获取操作与数据库打交道的session protected Session getSession(){ return SessionFactory.getCurrentSession(); }
public void save(T entity){ getSession().save(entity); } public void delete(Long id){ Object obj = getSession().get(clazz,id); getSession().delete(obj); } public void update(T entity){ getSession().update(entity); } public T getById(Long id){ if(id==null){ return nulll; } return (T)getSession().get(clazz,id); } public Set<T> getByIds(Long[] ids){ if(ids==null||ids.length==0){ return null; } List list = getSession().createCriteria(clazz).add(Restrictions.in("id",ids)).list(); return new HsahSet(list); } public List<T> findAll(){ return getSession().createCriteria(clazz).list(); } 其实分页的方法可以放在这里写,为什么呢,因为一个项目中有很多的action的显示都是要分页显示的,代码重复,我们也可以提取出来,这里,我写到后面的文章里面了,这里就不写了。。。