业务系统设计说明一

阅读更多

基于springside构建:

包结构说明:

业务系统设计说明一_第1张图片

Utils中存放系统公用类,其中SysConstants类存放系统常量。

Workflow包存放与工作流相关的信息,包含jpdl文件,流程授权类,流程监听类等。

系统整体层次结构:

       POJO:采用注解形式,具体可以参照系统中已有的entity中的注解。

      

DAO  :处理与数据库交互的功能  所有DAO的基类为HibernateDAO  基于泛型,使用注解形式将其注册为bean。所有类名上面加上注解:@Repository,不需要接口类,通常情况下DAO不需要写任何代码,因为多数查询,修改,删除方法其父类已经提供。

SERVICE:事务管理,业务过程,系统核心业务逻辑所在  spring 管理事务  使用spring注解将其注册为bean,所有类名上面加上:

@Service

@Transactional

为了减少类的数量,通常是一种业务过程对应一个Manager,比如系统的安全模块对应一个Manager,而不是一个业务实体对应一个Service,当然,这由你自己根据实际进行决定。

仍然采用IoC的形式获取其它的bean,只需要将你的bean 加上注解:@autowired即可。 spring会根据类的类型进行注入。 通常情况下Service也不需要接口。

  

Action:MVC采用struts2,所有Action的基类为CrudActionSupport  同样是基于泛型。

注意:所有action方法的返回结果值通常情况下是一致的:比如

查询(方法名为list )跳转返回 SUCCESS

添加或者修改 (方法名为input)跳转返回  INPUT; 

添加或修改(方法名为SAVE)成功或者delete(方法名为delete)后返回RELOAD

   同样Action中对manager的注入是采用 @autowired  不需要get/set方法。

   注意:为了保证代码的一致性,请不要在Action中直接注入DAO  而且DAO是不在事务管理中的。

系统查询功能的实现:

系统查询的功能由springside实现,可以不限字段,不限条件,而且不需要自己拼写SQL语句:具体方法为:

在查询页面上写查询字段,比如 filter_EQS_namevalue="${param[' filter_EQS_name ']}" >

 

关键是这个name:filter_EQS_name  其中filter为固定前缀,EQ表示equals,代表SQL语句中的”=” ,当然还有LIKE,LT,GT,LE,GE”S”代表你的这个字段为String类型,还可以写I(Integer),N(Double),D(Date)等,注意:Double类型为N!最后为你的字段在hibernate  POJO中的字段名。  如果你想这个查询框既可以根据字段1模糊查询,也可以根据字段2模糊匹配,你可以这么写:name=”filter_LIKES_NAME_OR_EMAIL_OR_LOGINNAME” 

 

Action中你需要写:

 

List filters = HibernateWebUtils.buildPropertyFilters(Struts2Utils.getRequest());//收集查询条件

 

调用你Manager中的search方法,你的search方法大约会是这个样子:
@Transactional(readOnly = true)

public Page searchUser(final Page page,

final List filters) {

       return userDao.findPage(page, filters);

    }

这个方法连分页也包含了。

系统分页功能的实现:

 

在查询页面上你需要写上:

查询formname为:mainForm

form中写入:

<input type="hidden" name="page.pageNo" id="pageNo" value="${page.pageNo}"/>

 

<input type="hidden" name="page.orderBy" id="orderBy" value="${page.orderBy}"/>

 

<input type="hidden" name="page.order" id="order" value="${page.order}"/>

 

 

然后

 

通常在form的结束之前导入:<%@ include file="/common/pages.jsp" %>

页面部分即结束:

 

Action中加入全局变量:

 

private Page page = new Page(); 加入get/set方法

 

如果你想在查询之前根据某字段进行排序,你可以在查询之前写上:

if (!page.isOrderBySetted()) {

       page.setOrderBy("id");

       page.setOrder(Page.ASC);

}

然后在查询时将page对象传入即可。

 

未完待续....

 

  • 业务系统设计说明一_第2张图片
  • 大小: 6.3 KB
  • 业务系统设计说明一_第3张图片
  • 大小: 5 KB
  • 业务系统设计说明一_第4张图片
  • 大小: 62.3 KB
  • 查看图片附件

你可能感兴趣的:(Spring,DAO,Bean,Workflow,Hibernate)