Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)(转载大象)这是本系列的最后一章,大象对示例进
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)(转载大象)
这是本系列的最后一章,大象对示例进行适当的扩充并说明。
?? ?
?? ?它们在每个对应的方法之前执行。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方式的查询方法,并进行了封装,可以很方便的调用。?? ?
?? ?
?? ?这个queryResult方法的定义,你可以改为传递用户名与角色ID的参数,大象在这里就是为了方便,直接使用Request请求。这里userDao调用的query方法是在HibernateDao里面封装的,因为继承了HibernateDao,就直接在Service层拿来用了。至于具体的,可以去看源码。?? ?页面部分没有进行大的调整,主要是将role-list.jsp重命名为role.jsp,因为使用的是超类的默认实现。添加了role-input.jsp和role-view.jsp两个文件,并在user.jsp中,加入了查询条件。这些代码都很简单就不再贴了,而且前一篇也贴过一部分。?? ?对于这个例子的完整讲解说明就到此结束了。大象还想补充说明一下,这个例子只适用于学习,不适合商用,想在实际项目中运用,还需要对框架做大量的改造工作。本系列只是基于SSH2入门学习之用,源码中不含jar包,下图是本例中所需的最少jar文件,大家只要下载了spring、struts、hibernate三个完整压缩包,那么这些jar基本上都包含了。?? ?
?? ?发布并启动Tomcat,然后输入访问地址:http://localhost:8080/ssh2 运行该示例,看看效果。?源码下载:?ssh2 