项目框架SSH2技术说明文档.docx

上传人:b****3 文档编号:3960733 上传时间:2023-05-06 格式:DOCX 页数:14 大小:21.50KB
下载 相关 举报
项目框架SSH2技术说明文档.docx_第1页
第1页 / 共14页
项目框架SSH2技术说明文档.docx_第2页
第2页 / 共14页
项目框架SSH2技术说明文档.docx_第3页
第3页 / 共14页
项目框架SSH2技术说明文档.docx_第4页
第4页 / 共14页
项目框架SSH2技术说明文档.docx_第5页
第5页 / 共14页
项目框架SSH2技术说明文档.docx_第6页
第6页 / 共14页
项目框架SSH2技术说明文档.docx_第7页
第7页 / 共14页
项目框架SSH2技术说明文档.docx_第8页
第8页 / 共14页
项目框架SSH2技术说明文档.docx_第9页
第9页 / 共14页
项目框架SSH2技术说明文档.docx_第10页
第10页 / 共14页
项目框架SSH2技术说明文档.docx_第11页
第11页 / 共14页
项目框架SSH2技术说明文档.docx_第12页
第12页 / 共14页
项目框架SSH2技术说明文档.docx_第13页
第13页 / 共14页
项目框架SSH2技术说明文档.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

项目框架SSH2技术说明文档.docx

《项目框架SSH2技术说明文档.docx》由会员分享,可在线阅读,更多相关《项目框架SSH2技术说明文档.docx(14页珍藏版)》请在冰点文库上搜索。

项目框架SSH2技术说明文档.docx

项目框架SSH2技术说明文档

SSH2框架零配置技术

内部文件:

[数字医疗chis项目技术学习资料]

颁布时间:

[2011-08-24]

目录

文件版本说明2

参考资料2

手册目的2

声明2

名词定义和缩略语说明2

1关于零配置3

1.1Hibernateannotation零配置*.hbm.xml以及hibernate.cfg.xml3

1.1.1获取Hibernate会话工场3

1.1.2Hibernateannotation标签的使用4

12.1Struts2Annotation零配置struts的相关配置文件8

&文件版本说明

表1版本说明

版本

发布时间

修订章节

作者

[对修订章节的描述从最近的一次修订开始]

熊钊

&参考资料

1.技术网站

&手册目的

为了是开发人员更快的熟悉项目中使用的技术,提高开发效率。

&声明

本文档所述均来自网络,绝大部分都已经验证过,如有不正确的地方请见谅。

&名词定义和缩略语说明

表2名词定义及缩略语说明

序号

缩写

说明

1

2

1关于零配置

首先要澄清一点,这里说的零配置并不是一点配置都没有,只是说配置很少而已。

SSH框架对于大多数人来说并不陌生,说到配置文件很容易想到hibernate的配置文件,struts.x的配置文件(spring的配置文件一般较少),项目大量以后需要花费大量的精力来维护这些配置文件,同时也给开发带来了不便,基于此零配置配置应运而生。

1.1Hibernateannotation零配置*.hbm.xml以及hibernate.cfg.xml

Hibernate版本中基于java5注解的新方法,它借助于新的hibernateannotation库,即可一次性的分配所有旧的映射文件。

利用hibernate注解后,可不用定义持久化类对应的*.hbm.xml文件直接以注解的方式写入在持久类中实现。

使用hibernateannotation的环境及jar包:

1.至少需要hibernate3.2和java2

2.相关jar包:

hibernate3.2.jar;

hibernate-annotation-3.3.0.jar;

hibernate-commons-annotation.jar;

ejb3-persistence.jar(hibernate注解使用了ejbJPA的注解)

1.1.1获取Hibernate会话工场

1.SessionFactory=newAnnotationConfiguration().buidsessionFactory();

2.在spring框架中可以使用AnnotationSessionFactoryBean类建立一个注解的hibernate会话

--Hibernate配置-->

--

-->

${hibernate.dialect}

${hibernate.show_sql}

${hibernate.format_sql}

${hibernate.cache.use_second_level_cache}

${hibernate.cache.provider_class}

${hibernate.cache.provider_configuration_file_resource_path}

--

使用扫描的方式不容易定位映射关系的配置错误

value="com.app.admin.entity.account"/>

-->

--系统表-->

com.app.system.entity.admin.User

com.app.system.entity.admin.Role

com.app.system.entity.admin.Depart

com.app.system.entity.admin.Menu

1.1.2Hibernateannotation标签的使用

一、环境搭建和基本映射

 1)添加Annotation包:

   hibernate-annotations.jar,ejb3-persistence.jar,hibernate-commons-annotations.jar

 2)在实体类中尽量使用JPA的标准注解来进行对象关系映射。

注解可以添加在属性上,也可以添加在getXxx()方法之上。

   a)@Entity映射一个实体类

      @Table(name="表名") 指定关联的表

   b)@Id映射OID

   c)@GeneratedValue(strategy=生成策略)指定OID的生成策略。

                           它的默认值是GenerationType.AUTO,相当于xml时的native。

                           如果不使用此注解定义Id,就将使用手动指定OID值。

JPA注解默认没提供uuid方式。

   d)@Version映射版本号属性(乐观锁)

   e)@Column(name="列名",nullable=true,unique=true)指定属性对应列的信息。

   f)@Temporal(TemporalType.TIMESTAMP)指定日期时间的类型。

(TIMESTAMP,DATE,TIME)

   g)简单属性可以不用注解。

默认就是@Basic

   h)@Transient指定属性不需要持久化.

   i)复杂属性:

关联,继承,组件,联合主键.

 3)在Hibernate全局配置文件中使用声明映射类的方式:

 4)使用Annotation来映射对象关系时,加载Hibernate全局配置文件要使用AnnotationConfiguration类,如下代码:

2    SessionFactoryfactory=newAnnotationConfiguration().configure().buildSessionFactory();

 5)持久化操作与之前没有区别。

 

二、映射关联关系

1.映射多对一

 1)@ManyToOne

 2)指定关联列@JoinColumn(name="xxx_id")

 

2.映射一对多

 1)@OneToMany 默认会使用连接表做一对多的关联。

 2)添加@JoinColumn(name="xxx_id")后,就会使用外键关联,而不使用连接表了。

33.映射双向一对多

 1)在多端:

    @ManyToOne

    @JoinColumn(name="外键名")

 2)在一端:

(一对多关联,把关系维护权交给多端更有效率)

    @OneToMany(mappedBy="多端的关联属性名")

    @JoinColumn(name="外键名")

44.mappedBy属性:

用在双向关联中,把关系的维护权反转。

跟hibernateXML映射中的property-ref一样。

55.cascade属性:

指定级联操作的行为(可多选)

  CascadeType.PERSIST:

调用JPA规范中的persist(),不适用于Hibernate的save()方法

  CascadeType.MERGE:

调用JPA规范中merge()时,不适用于Hibernate的update()方法

  CascadeType.REMOVE:

调用JPA规范中的remove()时,适用于Hibernate的delete()方法

  CascadeType.REFRESH:

调用JPA规范中的refresh()时,适用于Hibernate的flush()方法

  CascadeType.ALL:

JPA规范中的所有持久化方法。

适用于Hibernate中的所有持久化方法

  

6.cascade属性和mappedBy用在一起时,一定要通过调用双方的set方法来建立关系。

67.双向一对一

 1)基于外键

   a)在主控方:

@OneToOne

   b)在被控方:

@OneToOne(mappedBy="对方的关联属性名")

   

 2)基于主键:

JPA标准中没有提供共享主键生成问题的标准方法,需要使用Hibernate的扩展。

   a)在主控方:

Car

   @Id

   @GeneratedValue(generator="my-uuid")

   @org.hibernate.annotations.GenericGenerator(name="my-uuid",strategy="uuid")

   privateStringid;

   @OneToOne(cascade={CascadeType.ALL})

   @PrimaryKeyJoinColumn

   privateBrandbrand;

 

    b)在被控方:

Brand

   @Id

   @GeneratedValue(generator="myFG")

   @org.hibernate.annotations.GenericGenerator(name="myFG",

     strategy="foreign",parameters=@Parameter(name="property",value="car"))

   privateStringid;

   @OneToOne(mappedBy="brand")

   privateCarcar;

78.双向多对多:

最好由某一端来维护这个关系会更有效率.示例:

学生与课程的多对多

 1)在主控方:

 @ManyToMany

 @JoinTable(name="student_course",

  joinColumns={@JoinColumn(name="student_id")},

  inverseJoinColumns={@JoinColumn(name="course_id")})

 privateSetcourseSet=newHashSet();

 2)在被控方:

 @ManyToMany(mappedBy="courseSet")

 privateSetstus=newHashSet();

 3)很多情况都需要把双向多对多拆成两个一对多:

1-->*<--1

8三、高级映射

1.继承映射:

1)整个继承树一张表

 在父类中添加从下注解

@Entity

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name="type",length=3)

@DiscriminatorValue("u")

 子类中添加以下注解

@Entity

@DiscriminatorValue("w")

92)每个子类一张表

在父类添加如下注解

@Entity

@Table(name="user")

@Inheritance(strategy=InheritanceType.JOINED)

在子类中跟普通实体类的映射相同

103)每个具体类一张表:

在父类中

@Entity

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

publicclassUser{

 @Id

 @GeneratedValue(strategy=GenerationType.TABLE,generator="xxGen")

 @TableGenerator(name="xxGen",allocationSize=1)

 privateLongid;

...

}

在子类中跟普通实体类的映射相同

112.组件映射:

组件类上用@Emabbedable。

在使用这个组件类的类上用:

 @Emabbed

 @AttributeOverrides({

  @AttributeOverride(name="email",column=@Column(name="p_email")),

  @AttributeOverride(name="address",column=@Column(name="p_address")),

  @AttributeOverride(name="mobile",column=@Column(name="p_mobile"))

 })

123.联合主键映射

 1.主键类:

用@Emabbedable映射。

并实现Serializable接口,使用主键属性重写hashCode()和equals()方法。

 2.使用这个主键类的类上还是用@Id映射。

12.1Struts2Annotation零配置struts的相关配置文件

Struts2使用convention插件来支持零配置,要用到strust-convention-plugin-2.1.8.jar

配置文件精简了,的确是简便了开发过程,但是,我们熟悉的配置突然disappear了,真是一下很不适应。

跟着潮流走吧,看看该怎样来搞定convention-plugin。

使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中,你也可以在你Maven项目的POM文件中添加下面包依赖org.apache.strutsstruts2-convention-plugin2.1.6零配置并不是没有配置,而是通过约定大于配置的方式,大量通过约定来调度页面的跳转而使得配置大大减少。

所以,首先应该了解下convention-plugin的约定:

 

1.默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置 

struts.convention.result.path这个属性的值来改变到其他路径。

如:

Xml代码则将路径配置到了WEB-INF/page下。

 

2.默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。

你可以通过设置struts.convention.package.locators属性来修改这个配置。

如:

则定义了在项目中,包路径包含web和action的将被视为Action存在的路径来进行搜索。

Com.ustb.web.*/com.ustb.action.*都将被视为含有Action的包路径而被搜索。

 

3.接着,Convention从前一步找到的package以及其子package中寻找com.opensymphony.xwork2.Action的实现以及以Action结尾的类:

com.example.actions.MainActioncom.example.actions.products.Display(implementscom.opensymphony.xwork2.Action)pany.details.ShowCompanyDetailsAction 

4.命名空间。

从定义的.package.locators标示开始到包结束的部分,就是命名空间。

举个例子:

Com.ustb.web.user.userAction的命名空间是:

”/user”。

Com.ustb.web.user.detail.UserAction的命名空间是:

”/user/detail” 

5.Convention通过如下规则确定URL的具体资源部分:

去掉类名的Action部分。

然后将将每个分部的首字母转为小写,用’-’分割,你可以设置struts.convention.action.name.separator如还是举个例子:

UserAction->userUserDetailAction->user-detail。

结合上面的。

对于com.ustb.web.user.detail.UserDetailAction,映射的url就是/WEB-INF/content/user/detail/user-detail.jsp 

6.struts支持.jsp.html.htm.vm格式的文件。

下面是actiong和结果模版的映射关系:

URLResultFilethatcouldmatchResultType/hellosuccess/WEB-INF/content/hello.jspDispatcher/hellosuccess/WEB-INF/content/hello-success.htmDispatcher/hellosuccess/WEB-INF/content/hello.ftlFreeMarker/hello-worldinput/WEB-INF/content/hello-world-input.vmVelocity/test1/test2/helloerror/WEB-INF/content/test/test2/hello-error.htmlDispatcher 

以上的内容来自struts2的文档http:

//struts.apache.org/2.1.6/docs/convention-plugin.html当然,简单的通过默认的方式来进行配置不能完全满足实际项目的需要。

所幸,convention的零配置是非常灵活的。

通过@Action注释对如下例子:

Java代码packagecom.example.web;importcom.opensymphony.xwork2.Action;importcom.opensymphony.xwork2.ActionSupport;publicclassHelloActionextendsActionSupport{@Action("action1")publicStringmethod1(){returnSUCCESS;}@Action("/user/action2")publicStringmethod2(){returnSUCCESS;}}方法名默认调用路径默认映射路径method1/hello!

method1.action./WEB-INF/content/hello.jspmethod2/hello!

method2.action./WEB-INF/content/hello.jsp 

通过@Action注释后方法名@Action注释后调用路径 

@Action注释后映射路径method1/action1!

method1.action./WEB-INF/content/action1.jspmethod1/user/action2!

method2.action/WEB-INF/content/user/action2.jsp 

通过@Actions注释Java代码packagecom.example.web;importcom.opensymphony.xwork2.ActionSupport;importorg.apache.struts2.convention.annotation.Action;importorg.apache.struts2.convention.annotation.Actions;publicclassHelloActionextendsActionSupport{@Actions({@Action("/different/url"),@Action("/another/url")})publicStringmethod1(){return“error”;} 

我们可以通过:

/different/url!

method1.action或/another/url!

method1.action来调用method1方法。

对应的映射路径分别是/WEB-INF/content/different/url-error.jsp;/WEB-INF/content/another/url-error.jsp可能误导了大家,一个方法被@Action注释后,只是多了一种调用方式,而不是说覆盖

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2