Spring Dao层设计
来源:互联网 发布:mac git 排除目录 编辑:程序博客网 时间:2024/04/28 20:10
Spring DAO层设计
Spring 为各种ORM框架提供了基于模板的Teplate 类,同时还提供一支持类,通过支持类可能方便的使用模板,从而使用模板类方便的操作数据库,其实模板类对于Hibernate 就是对Session的一个代理,对于IBatis来说就是SqlMapClient的一个代理,我们可能使用自己的DAO继承Spring的Support类,但是在实际的开发中这样的做法存在一定的缺陷,至少在框架的侵入性上面做得不是很好.因此我们可以在支持类的基础上再创建一个基类的方式来简化开发,加强代码利用的力度
DAO基类的设计,可以在HibernateDaoSupport的基础上实现自己的DAO,进行封闭,提供泛型的支持,泛型的支持对于对象的更新没有什么影响,但对于对象的检索带来很大的方便,在没有泛型支持的情况查询实体,不仅要指定主键还需要指定实体的类型,由于方法入参比较复杂,调用者还要对返回的结果进行强制转换。
如下图:展示了如何设计一个结构良好的DAO实现
package cn.com.snt.spring.dao;
import java.io.Serializable;
import java.util.List;
public interface BaseDao<T> {
public T get(Serializable id);
public List<T> getAll();
public void save(Object o);
public void remove(Object o);
public void update(Object o);
}
package cn.com.snt.spring.dao;
public interface ForumDao{
public long getForumnNumber();
}
package cn.com.snt.spring.dao;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
public class ForumHibernateDao extends HibernateDaoBase<Forum> implements ForumDao{
public long getForumnNumber() {
Iterator it=getHibernateTemplate().iterate("select count(f.forumnId) from Forum f");
return (Long)it.next();
}
}
package cn.com.snt.spring.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* 自定义的Dao实现基类
* @author LEPING LI
*
* @param <T>
*/
public class HibernateDaoBase<T> extends HibernateDaoSupport implements BaseDao<T> {
private Class<T> entityClass;
public HibernateDaoBase() {
Type genType=this.getClass().getGenericSuperclass();
Type[] params=((ParameterizedType)genType).getActualTypeArguments();
entityClass=(Class)params[0];
}
public T get(Serializable id) {
return (T)getHibernateTemplate().load(entityClass, id);
}
public void remove(Object o) {
getHibernateTemplate().delete(o);
}
public void save(Object o) {
getHibernateTemplate().save(o);
}
public void update(Object o) {
// TODO Auto-generated method stub
}
public List<T> getAll(){
return null;
}
}
- Spring Dao层设计
- Spring DAO层设计思想
- 基于Spring的DAO层设计
- 基于Spring的DAO层设计
- 基于Spring的DAO层设计
- 基于Spring的DAO层设计
- Spring DAO层的设计思想
- Dao层设计
- spring Dao层注意点
- spring一站式框架(dao层)
- spring+struts+hibernate中DAO层和业务逻辑层如何设计
- 12.3 Dao层的设计
- ssm-dao层设计整理
- 持久层dao设计模式
- 【JavaWeb】Hibernate Dao层设计
- Spring DAO设计
- facade层,service 层,domain层,dao 层设计
- 浅谈Facade层,Service层,DAO层设计原则
- 裸奔程序为什么会跑飞?
- 从今天开始,我的博客开写了
- 常见的C语言面试编程题(二)
- 【转】servlet实现页面跳转
- TextMate已破解
- Spring Dao层设计
- compress algorithm
- 动态创建和删除VB控件
- sql server 2000/2005 游标的使用操作
- MSSQL Case when用法
- jquery学习之—构建功能型表单(一)
- Linux 调试技术
- advertising_ok.php
- 难舍Basket(整了1天)