黑马程序员技术交流社区
标题:
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解
[打印本页]
作者:
tfy
时间:
2012-12-1 09:29
标题:
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)
这是本系列的最后一章,大象对示例进行适当的扩充并说明。
其实到第四篇,对于示例的说明就已经全部讲完了,如果按照这样的例子,很难有什么值得学习的地方。大象本着写点有用东西的原则,在这章,对示例进行一下适当的扩充并说明。
第五部分:扩展框架
paramsPrepareParamsStack拦截器栈
paramsPrepareParamsStack这个拦截器栈是在struts2-default.xml中定义的,里面包含了很多个拦截器,最重要的是这三个:params、prepare、modelDriven。我们只要记住这样几点。
params:它负责将请求参数值设置到Action中与之同名的属性中。
prepare:当Action实现了Preparable接口时,这个拦截器就会调用prepare()方法。如果你有想在execute()方法之前执行的逻辑处理,它就可以帮你完成这个功能。
modelDriven:如果Action实现了ModelDriven接口,这个拦截器就会把getModel()方法中的返回结果压入值栈。这就意味着,可以在结果页面上直接使用model对象的属性。
它们在每个对应的方法之前执行。prepareEntity就是来初始化实体对象,然后由modelDriven拦截器将getModel()方法中的返回结果放入值栈,当返回页面时,就可以直接取值了。
StrutsAction
重新定义一个基类,里面封装大部分的通用操作,主要依靠泛型来实现,将hibernateDao注解进来,通过继承这个基类进行基本的CRUD操作。本文末尾提供示例源码下载,里面有详细的注释,这里我只贴出部分重要代码进行说明,为了行文需要,有些注释去掉了,但源码里面都有,请大家放心。
通过扩展ActionSupport,使用泛型参数,构造函数根据反射得到T的具体类型。
这就是默认的执行方法,基本的操作,在这个超类里面都进行了定义,每个方法里面设置的以do开头的方法,是方便让子类进行覆盖,当基本的业务逻辑无法满足我们的需求时,就可以在子类重写这些方法。
方法有默认实现,主要是列表显示,保存和删除,新增和修改已经有getModel()方法取得实体,在页面上使用s标签就可以直接取值,除非有特殊的业务需求,否则不用覆盖doInputEntity()、doViewEntity()方法。请注意,当需要实现自己的逻辑时,只需要覆盖上面定义的这些方法,而不用重写execute、input之类。
我对HibernateDao又进行了适当的扩展与修改,提供了更多的基本封装方法,不过大家还可以继续添加。里面都有详细的注释,这里就不在赘述了。
功能扩展
我对例子做了两个功能,一个是角色表的增加、修改、删除、查看,另一个就是用户表的查询。可以从源码中看到,我在RoleAction中没有写一行关于增删改查的代码,因为它属于基本操作,超类中已经封装好了,所以这部分的代码都省了。对于用户表的查询,我覆盖了doListEntity()方法,在业务层进行条件封装,执行查询,返回结果。
这个list就是在超类中定义的,因为默认实现中也用到了list,另外list有一个get方法,用于在页面中显示。如果不想采取方式取得list集合,就重写doListEntity()方法。这里说明下,我是没有加分页功能的,大家可以按自己的方式添加分页查询。
在用户查询方法中,我使用的是QBC对象查询,因为这种方式很简洁,不过我在HibernateDao中也写了HQL和SQL方式的查询方法,并进行了封装,可以很方便的调用。
发布并启动Tomcat,然后输入访问地址:http://localhost:8080/ssh2 运行该示例,看看效果。
源码下载:
ssh2
本文为菠萝大象原创,如要转载请注明出处。
http://bolo.blogjava.net/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2