好久没有更新博客了,最近一段时间工作比较忙,所以请见谅,无论你是爱看呢还是爱看呢还是爱看呢,总之或许对你有些帮助。
DAO(Data Access Object)是一个数据访问(顾名思义就是与数据库打交道)接口,DAO一般在业务逻辑与数据库资源之间,是我们访问数据库的桥梁。
在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
今天就说一下在项目代码开发过程中经常会遇到的DAO方面问题:
1.项目中模块众多,传统做法是每个模块编写一个独立的DAO接口及实现。这种情况下模块之间功能往往相似(传统增删改查),所以给程序员开发工作量上带来了不小的负担,而且维护起来也非常困难。
2.采用1方式编写众多DAO接口,这些编写好的代码只能在本系统中使用,移植到其他系统中相当于重写,所以利用率非常低。
3.一旦某个业务逻辑变更,带来的会是灾难性的代码修改问题,程序员需要逐个类的去修改每一个方法,难免会有遗漏和错误。
4.每个程序员编写习惯及规范性的差异导致每个接口中定义的类名,方法名,参数名等等不一致,甚至千奇百怪。
..........
等等。
为了避免以上一些问题并且发挥出高级编程语言的高度复用性的优点,我们可以将具有相同特征、特性的DAO接口封装为一个公用或基础DAO,我们给这个DAO接口起名为CommonDAO。
在CommonDAO中将共用方法(增删改查)提取,然后其他方法调用此DAO即可完成相同作用的工作,这样就节省了共用方法的这部分开发时间,而且维护起来也非常方便,下面就开始代码部分的讲解。
1.定义CommonDAO接口,代码如下:
/**
*
* @description 公共DAO
* @author ming.li
* @modify ming.li
* @modifyDate 2014-1-6 下午12:29:21
* @notes 未填写备注
* @version 1.0.0
*
*/
public interface CommonDAO{
/**
*
* @description 添加
* @param o
* @return
* @returnType Integer
* @exception
* @since 1.0.0
*/
Integer add(Object o);
/**
*
* @description 删除
* @param id
* @param clazz
* @returnType void
* @exception
* @since 1.0.0
*/
boolean delete(Integer id,Class clazz);
/**
*
* @description 修改
* @param id
* @param o
* @returnType void
* @exception
* @since 1.0.0
*/
boolean modify(Integer id,Object o);
/**
*
* @description 详情
* @param id
* @param clazz
* @return
* @returnType Object
* @exception
* @since 1.0.0
*/
Object detail(Integer id,Class clazz);
/**
*
* @description 根据QuerySet查询列表
* @param qs
* @param startIndex
* @param pageSize
* @return
* @returnType ResultSet
* @exception
* @since 1.0.0
*/
ResultSet queryByList(QuerySet qs, int startIndex, int pageSize);
}
接口比较简单,含有增删改查几种基本方法。这里需要重点说下ResultSet queryByList(QuerySet qs, int startIndex, int pageSize);这个方法,我将查询参数与返回结果进行了封装,代码如下:
2.QuerySet类:
/**
*
* @description 查询参数集
* @author ming.li
*