OA系统设计 联系客服

发布时间 : 星期一 文章OA系统设计更新完毕开始阅读95854d245afafab069dc5022aaea998fcc2240b4

src 项目源代码 配置文件 单元测试 JavaScript脚本文件 CSS样式文件 conf test script style WebRoot文件夹下 WEB-INF/jsp jsp页面文件(再创建子文件夹分类存放) 2.3.2. 包结构

使用三层:显示层(View),业务层(Service),数据访问层(Dao) (部分)

包名 cn.itcast.oa.domain cn.itcast.oa.dao cn.itcast.oa.dao.impl cn.itcast.oa.service cn.itcast.oa.service.impl cn.itcast.oa.struts2.action cn.itcast.oa.util cn.itcast.oa.cfg cn.itcast.oa.filter View

显示

实体(Domain) Dao接口 Dao的实现类 Service接口 Service的实现类 Struts的Action 一些工具类 Jsp + JSTL + Struts + jQuery JBPM Hibernate

说明 Service Dao

业务逻辑 数据访问

3. 基础功能

3.1. 设计BaseDao接口与BaseDaoImpl类

每个实体都应有一个对应的Dao,他封装了对这个实体的数据库操作。例 实体 Dao接口 实现类

======================================================== User --> UserDao --> UserDaoImpl Role --> RoleDao --> RoleDaoImpl

Department --> DepartmentDao --> DepartmentDaoImpl Article --> ArticleDao --> ArticleDaoImpl ... 说明:

4, 实体的Dao接口要继承BaseDao接口。 5, Dao的实现类要继承DaoImplBase类。

6, 也可以不继承指定的接口或类,这样就要自己写相应的方法。

7, T getById(Long id)与List getByIdList(Long[] idList)不要合并为List

getById(Long... ids),因为获取一个对象时也是返回List,不方便。 获取 BaseDao的类型参数T的Class 问题:

1, 有了DaoBase与DaoImplBase,还要用UserDao、RoleDao吗?

答:要用。因为UserDao或RoleDao中的方法可以分为有公有的方法与特有的方法两部分。公有的方法是通过继承BaseDao得到的,特有的方法要写在自己里面(BaseDao中是没有的)。 2, UserDaoImpl已经继承了BaseDaoImpl,就不实现UserDao可以吗?

答:不可以。否则UserDao userDao = new UserDaoImpl(); 就不成立。 使用反射获取类型参数的真实类型的代码如下: public DaoBaseImpl () { } Type type = this.getClass().getGenericSuperclass(); ParameterizedType pt = (ParameterizedType) type; this.clazz = (Class) pt.getActualTypeArguments()[0]; 说明:

1, 使用Session时,不要自己创建,也不要管理事务,直接调用getSession()即可。 2, 暂时不实现getSession()方法,在后面的事务管理中实现:

3, protected Session getSession(){

4, throw new UnsupportedOperationException(); 5, }