框架(一)

基于springside构建:

包结构说明:

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

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

系统整体层次结构:

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

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

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

@Service

@Transactional

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

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

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

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

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

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

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

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

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

系统查询功能的实现:

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

在查询页面上写查询字段,比如<input type=”text” name=” 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!最后为你的字段在hibernatePOJO中的字段名。如果你想这个查询框既可以根据字段1模糊查询,也可以根据字段2模糊匹配,你可以这么写:name=”filter_LIKES_NAME_OR_EMAIL_OR_LOGINNAME”

在Action中你需要写:

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

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

publicPage<User> searchUser(final Page<User> page,

final List<PropertyFilter> filters) {

returnuserDao.findPage(page, filters);

}

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

系统分页功能的实现:

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

查询formname为:mainForm

form中写入:

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

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

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

然后

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

页面部分即结束:

在Action中加入全局变量:

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

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

if (!page.isOrderBySetted()) {

page.setOrderBy("id");

page.setOrder(Page.ASC);

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值