`
koreyoshi
  • 浏览: 241200 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SSH全注解实例详解(3)(转)

 
阅读更多
转载地址:http://www.java3z.com/cwbwebhome/article/article8/81137.html?id=2584
在前两章我为大家详细分析了JAR包的选择和必须的配置文件,那么这一章,我就对例子的
层次结构进行说明,并实现除WEB层的功能代码。
    第三部分:建立框架代码
    工程结构
    

    大家可以看到,本例一共分为:daoentityserviceweb四层。另外在这些层次下,还以业务功能再进行分包,
这样做是为了方便在以后的功能扩展中,能更好的管理和维护代码。如果将所有类都直接集中在这4个包下面,随着类的增加,
会越来越难以维护,而且查找起来也很费劲。
    HibernateDao
    在本例中,我是通过继承Spring提供的HibernateDaoSupport来实现持久层的基类。同时引入泛型参数,
封装了一些基本操作方法。

    

    这是HibernateDao的部分代码,引入的这个泛型参数,其实就是实体类(UserRole)。通过传递这个实体类,
在构造方法中利用反射特性将它从JVM中取出来。

    

    这里的getClass()方法是获得继承HibernateDao的类(UserDaoRoleDao)
    getGenericSuperclass()方法就是通过这些继承了HibernateDao的类,来得到父类(父类就是HibernateDao)的泛型。
注意这个方法的返回值为Type,这是一个类型接口。请参考API。

    因为在继承HibernateDao 
的时候,会给它加一个泛型参数。比如,UserRole实体类。因此超类是参数化类型,所以返回的 
Type对象包含所使用的实际类型参数。这里返回的Type对象是ParameterizedType接口的实现类ParameterizedTypeImpl所以要将返回类型转型为ParameterizedType

    getActualTypeArguments()方法是ParameterizedType接口中的,它的作用就是获得实际类型参数 
Type对象的数组,因为我们这里只定义了一个泛型参数,数组里面也只有一个值,所以需要在数组下标处填0。
然后最后一步转型千万别忘记了,因为这个方法返回的可是一个Type数组喔。

    如果对于这部分的说明还有点不理解的话,请到时候有了代码,设个断点跟踪一下,就会全部清楚了。关于java反射,
它已经超出本文的范围。大象只对本例中用到的部分进行讲解。
    使用这种写法,是方便我们进行类型转换与类型检查。另外还可以简化某些方法的写法。
比如:createCriteria(Criterion... 
criterions)这个方法。参数是Criterion类型的可变参数,它是用来设置查询条件。如果要进行对象化查询,
那么最简单的写法就可以直接写成createCriteria()。另外还有重载的方法,可以根据传入class类型来创建自定义查询。
    dao
    持久层的Dao类是根据实体类定义,一般是一个实体类就会有一个对应的Dao类。当然这要跟业务需求来设计,
不是绝对的。另外你也可以为了简便而去掉dao层,将持久化操作与业务逻辑全部写在service层。


    
    这些定义的方法是供service层调用,在业务层,将不会看到一行与持久层有关的代码,降低藕合性是这样做的目的。
@Repository注解的作用就是标注这个UserDao是一个持久层组件。
还记得前一章讲到的扫描器吗?component-scan 
它就是用来将标有@Repository@Service这样的注解类扫描到Spring的容器里,并且同时对标有@Autowired
注解的Bean启用了自动注入功能。这就是Spring2.5开始提供的新特性。我们使用注解的方法,
就可以告别那繁琐的配置文件定义。
    entity
    关于实体的定义就是使用JPA注解,关于这部分,我以前写过一篇文章专门讲这个,
如果有不清楚的朋友可以先参考一下。学习JPA——Hibernate 
Annotation使用实例
    本例中,我有两点要讲下。
    第一、管理主键的表generator_table去掉原来单独定义的那个ID主键,把g_key设为主键,
整个表将只有两个字段,g_keyg_value。
    第二、在User实体中,我将角色IDrole_id)与角色实体(Role)做了一个多对一关联。
这一点是原来文章中没有讲过的。

    

    请一定注意role_iduser表的字段。我在本例中设定的是一个角色可以对应多个人员,所以这个role_id
存的就是roleid的值。fetch 
= FetchType.LAZY指定采用延迟检索,如果当你取得了User对象,但又不想取Role中的信息,这时,
User对象中的role属性是代理状态。
Role对象中的值都是空的。只有当你使用role.idrole.name进行取值的时候,hibernate才会去数据库中查找对应的记录,
因此在一定程度上降低了资源消耗。不过这里有点要注意,采用延迟检索的时候,
需要加上前一篇讲到的OpenSessionInViewFilter过滤器。否则会遇到session关闭的异常。

    service
    

    @Service表示这是业务层组件。在业务层需要对UserDao加上@Autowired注解,大象在这里将业务层的方法名与持久
层的方法名定义为一样的,是我的一种习惯,大家可以按自己的想法来做。
    测试
    既然有了这么多代码,那就来测试一下吧,看看有没有问题。


    
    好吧,为了照顾那些坚定的JUnit拥护者,再写一个JUnit测试。本例使用junit-4.4.jar
    

    

    @BeforeClass注解的方法表示在类实例化之前,也就是在类的构造方法执行之前就会执行。
而且使用这个注解的方法必须是static void
    @Test标明这是测试方法,方法名不用像以前那样必须按照规则进行命名,可以自由定义。
    上图显示大象使用JUnit方式测试也通过了(如果不会通过我写它干嘛?嘿嘿)。
    假如我将张三改成张四,再来看看测试结果。



    这个截图可以很明显的说明所有东西。
    这一篇是给大家讲怎么用代码来实现除web层之外的全注解步骤。当然,我主要是讲思路,其实思路比代码重要得多。
这一个系列的最后,我会放上所有源码供大家下载。现在这样慢慢分析,是想给大家讲道理。我们应该努力提升自己的境界与层次,
而不要只把眼光放在代码上面。
下一章将会着重介绍web层,以及struts2的注解插件struts2-convention。那么,我们下次继续。
    本文为菠萝大象原创,如要转载请注明出处。
分享到:
评论

相关推荐

    SSH全注解实例详解,hibernate,struts,spring

    在实际开发中,SSH框架的使用往往结合IDE(如Eclipse或IntelliJ IDEA)进行,这些工具通常有对SSH支持的插件,能帮助开发者快速生成和管理注解配置。同时,持续集成工具(如Jenkins)和版本控制系统(如Git)也是...

    ssh2注解实例详解

    在这个SSH2的全注解实例中,开发者会逐步学习如何在MyEclipse环境下创建项目,配置框架,编写Action、Service、DAO和实体类,并通过注解进行相应的配置。同时,SQL语句的使用和数据库的交互也是实例的重要组成部分,...

    Struts2+Spring2.5+Hibernate3全注解实例详解

    超级详细的SSH2项目实例详解,并且附带两个项目详解。两种注解实现方式。不同的生成数据脚本实现。 在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大象根据项目实践经验,通过二个实例,详细的为大家讲解...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解,涉及的是JavaEE开发中常见的SSH框架(Struts2、Spring、Hibernate)的整合,尤其强调了注解在开发中的应用,旨在简化配置,提高开发效率。SSH框架的组合在...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)

    在这个全注解实例中,我们将深入理解如何利用Struts2.1.6、Spring2.5.6和Hibernate3.3.1构建应用程序,避免传统的XML配置文件,转而采用注解方式来提高开发效率。 **开发环境**: - JDK 1.6.0_18 - Eclipse 3.2.1 -...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(含JAR包)

    这个全注解实例详解旨在帮助开发者理解如何在不使用XML配置的情况下,通过注解实现这三大框架的集成与应用。 Struts2是MVC(Model-View-Controller)设计模式的一个强大实现,提供了一种用于处理HTTP请求和响应的...

    全注解版SSH增删改查实例

    总结来说,全注解版SSH增删改查实例是Java Web开发中一个实用的学习资源,它展示了如何在不依赖XML配置的情况下,利用Spring、Struts2和Hibernate的注解实现高效的业务逻辑处理。这样的实例有助于开发者快速理解和...

    ssh注解版(已测试)

    在压缩包中的"Struts2[1].1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(转自大象).doc"文件,很可能是详细的SSH整合教程,涵盖如何使用这三个框架的注解配置进行开发。"ssh2"可能是指更高级或更新版本的SSH整合...

    基于全注解的SSH2框架

    **基于全注解的SSH2框架详解** SSH2框架,即Spring、Struts2和Hibernate的集成,是Java开发Web应用程序的主流框架之一。在这个基于全注解的SSH2框架中,我们将深入探讨如何利用注解来简化配置,提高开发效率,并...

    SSH整合cxf webservice实例

    SSH整合CXF Webservice实例详解 在Java世界中,SSH(Spring、Struts、Hibernate)是一种常见的企业级应用开发框架组合,它提供了强大的MVC(Model-View-Controller)架构支持,以及持久层管理和业务逻辑处理。而CXF...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例

    总结起来,SSH2框架的全注解实例为开发者提供了一种高效、简洁的开发方式。通过注解,开发者可以更专注于业务逻辑,而不是繁琐的配置。然而,选择正确的jar包和版本,以及正确配置开发环境,是成功实施这种开发模式...

    SSH整合连数据库实例

    SSH整合连数据库实例详解 SSH(Struts2 + Spring + Hibernate)是Java开发Web应用程序时常用的三大框架。它们各自负责不同的职责:Struts2作为MVC框架处理控制器逻辑,Spring提供依赖注入和事务管理,Hibernate则...

    ssh.rar_J2EE SSH_java ssh 详解_ssh_ssh j2ee

    这个"ssh.rar"压缩包可能包含了关于如何整合和使用这三个框架的详细教程和源码实例,帮助开发者深入理解和掌握SSH架构。 1. **Spring框架**:Spring是一个全面的Java应用开发框架,核心特性包括依赖注入(DI)和...

    SSH框架搭建详解——登录实例

    3. **添加SSH框架支持**: - **Struts2框架**:导入所需的Struts2相关jar包,例如`struts2-spring-plugin-2.2.1.jar`,这允许Struts2和Spring框架进行集成。 - **Spring框架**:除了Struts2,还需要添加Spring的...

    SSH框架整合步骤详解

    SSH框架整合是Java Web开发中常见的一种技术组合,主要包括Spring、Struts2和Hibernate三个开源框架。这三者分别负责不同的职责:Spring作为整体的管理中枢,Struts2处理前端控制器,Hibernate则专注于数据持久化。...

    ssh框架实例程序

    - **说明文档**:可能包含SSH框架的集成步骤、配置详解、运行示例和可能出现的问题解决方案。 通过分析这个实例程序,开发者可以学习到如何: 1. 配置和启动SSH环境:安装必要的库,配置web.xml、struts.xml、...

    java ssh三大框架整合

    Java SSH三大框架整合 Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解五

Global site tag (gtag.js) - Google Analytics