提取出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 implements BaseDao{
@Resource
private SessionFactory sessionFactory;
private Class 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 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 findAll(){
return getSession().createCriteria(clazz).list();
}
其实分页的方法可以放在这里写,为什么呢,因为一个项目中有很多的action的显示都是要分页显示的,代码重复,我们也可以提取出来,这里,我写到后面的文章里面了,这里就不写了。。。




你可能感兴趣的:(提取出Dao中公共的部分BaseDao)