zoukankan      html  css  js  c++  java
  • 或通过annotation声明ORM

    Guzz JPA Annotation

    Guzz支持JPA定义的注解,并参照hibernate进行了注解扩展,以满足guzz特性功能的声明需要。

    对于JPA自身的注解,使用方式与JPA规范规定的相同;对于扩展的注解,命名和使用方式与hibernate相同(除了包名不一样,其他几乎无差别)。

    Guzz仅支持单对象ORM映射,不支持对象之间的关联映射(one-one, one-many, many-to, many-many),也不支持JPA的持久化方法。guzz annotation仅用来替代hbm.xml配置文件。

    声明annotation

    在guzz中一般需要在POJO中声明最少2个annotation:@javax.persistence.Entity和@org.guzz.annotations.Entity。

    前者为JPA规范要求,后者用于声明对象的businessName,用于编程时按名称引用。

    一个典型域对象ORM定义如下:

     1 package org.guzz.test;
     2 
     3 import java.util.Date;
     4 
     5 import javax.persistence.Column;
     6 import javax.persistence.GeneratedValue;
     7 import javax.persistence.GenerationType;
     8 import javax.persistence.TableGenerator;
     9 
    10 import org.guzz.annotations.Table;
    11 
    12 
    13 @javax.persistence.Entity
    14 @org.guzz.annotations.Entity(businessName = "comment")
    15 @Table(name="TB_COMMENT", shadow = CommentShadowView.class)
    16 @TableGenerator(
    17                 name = "commentGen",
    18                 table="tb_id",
    19                 catalog="somelog",
    20                 schema="some_schema",
    21                 pkColumnName="pk",
    22                 pkColumnValue="2",
    23                 valueColumnName="id_count",
    24                 initialValue=100,
    25                 allocationSize=20
    26                 /*
    27                  * create table tb_id(pk int(11) primary key, id_count int(11) default 0)
    28                  * insert into tb_id(pk, id_count) values(2, 100)
    29                  */
    30 )
    31 public class Comment {
    32 
    33         @javax.persistence.Id
    34         @GeneratedValue(generator="commentGen", strategy=GenerationType.TABLE)
    35         private int id ;
    36         
    37         private int userId ;
    38         
    39         private String userName ;
    40         
    41         //@javax.persistence.Basic(fetch=FetchType.LAZY)
    42         @Column(name="DESCRIPTION")
    43         private String content ;
    44         
    45         private Date createdTime ;
    46 
    47         public int getId() {
    48                 return id;
    49         }
    50 
    51         public void setId(int id) {
    52                 this.id = id;
    53         }
    54         
    55         //other gets/sets...
    56 }

    注意: 每个域对象都必须包含一个主键,通过@javax.persistence.Id声明。同时guzz将按照主键声明在变量上还是getXxx方法上决定按照field还是property构造映射属性。

    Guzz支持的JPA Annotation,以及Guzz自身扩展的Annotation的详细使用说明,请参看Guzz JPA Annotation完全参考手册

    配置annotated的领域对象到系统中

    对于hbm.xml的配置文件,通过guzz.xml中配置:

    1 <business name="user" dbgroup="default" class="org.guzz.test.User" interpret="" file="classpath:org/guzz/test/User.hbm.xml" />
    2 <business name="book" class="org.guzz.test.Book" file="classpath:org/guzz/test/Book.hbm.xml" />

    来声明。

    同样的道理,对于annotated的领域对象,也需要在guzz.xml主配置文件中进行声明。声明的标签为:a-business。

    每个a-business标签对应1个领域对象。a-business拥有3个属性:

    属性名 Required 作用
    class Required annotated领域对象的类全名称(fully qualified class name)
    name Optional business name。如果填写,则覆盖注解中的businessName
    dbgroup Optional 对象存储到的数据库组。如果填写,则覆盖注解中的dbGroup

    一个典型的配置如下:

    1  <a-business name="user" dbgroup="default" class="org.guzz.test.User"/>
    2         <a-business name="book" class="org.guzz.test.Book" />
    3         <a-business name="userInfo" dbgroup="oracle" class="org.guzz.test.UserInfo" />
    4         <a-business name="userInfo2" dbgroup="default" class="org.guzz.test.UserInfoH2" />
    5         <a-business name="comment" dbgroup="default" class="org.guzz.test.Comment"/>
    6         <a-business name="cargo" class="org.guzz.test.shop.Cargo" />
    7         <a-business name="sp" class="org.guzz.test.shop.SpecialProperty" />

    其中,每个领域对象的定义可以在guzz测试源代码中找到。

    主键使用示例

    native(Mysql和H2中为自增):

     1 @javax.persistence.Entity
     2 @org.guzz.annotations.Entity(businessName="user")
     3 @Table(name="tb_user")
     4 public class User implements Serializable {
     5         
     6         private int id ;
     7         ...
     8         
     9         @javax.persistence.Id
    10         @GeneratedValue(strategy=GenerationType.AUTO)
    11         public int getId() {
    12                 return id;
    13         }
    14         ...

    assigned:

     1 @javax.persistence.Entity
     2 @Table(name="tb_user")
     3 public class User implements Serializable {
     4         
     5         private int id ;
     6         ...
     7         
     8         @javax.persistence.Id
     9         @GenericGenerator(name = "assignedGen", strategy = "assigned")
    10         @GeneratedValue(generator = "assignedGen")
    11         public int getId() {
    12                 return id;
    13         }
    14         ...

    sequence:

     1 @javax.persistence.Entity
     2 @Table(name="tb_user")
     3 public class User implements Serializable {
     4         
     5         private int id ;
     6         ...
     7         
     8         @javax.persistence.Id
     9         @Column(name="pk")
    10         @GeneratedValue(generator="userIdGen")
    11         @GenericGenerator(name="userIdGen", strategy="sequence", parameters={@Parameter(name="sequence", value="seq_user_id")}
    12         )
    13         public id getId() {
    14                 return id;
    15         }
    16         ...

    random:

     1 @javax.persistence.Entity
     2 @Table(name="tb_invitation_key")
     3 public class InvitationKey implements Serializable {
     4         
     5         private String id ;
     6         ...
     7         
     8         @javax.persistence.Id
     9         @GeneratedValue(generator="randomGen")
    10         @GenericGenerator(name = "randomGen", strategy = "random", parameters={@Parameter(name = "length", value = "32")})
    11         public String getId() {
    12                 return id;
    13         }
    14         ...

    uuid:

     1 @javax.persistence.Entity
     2 @Table(name="tb_invitation_key")
     3 public class InvitationKey implements Serializable {
     4         
     5         private String id ;
     6         ...
     7         
     8         @javax.persistence.Id
     9         @GeneratedValue(generator="uuidGen")
    10         @GenericGenerator(name = "uuidGen", strategy = "uuid")
    11         public String getId() {
    12                 return id;
    13         }
    14         ...

    其他主键生成策略,以及策略详细参数,请阅读 TutorialHbmXml。如果您有其他示例补充,请通过本页评论告诉我们。

  • 相关阅读:
    Linux命令:cp (copy)复制文件或目录
    使用 robots.txt 文件阻止或删除网页说明
    ecshop优化修改sitemap.xml到根目录
    我虚拟机上装的CentOS系统显示的ip配置是127.0.0.1,请问如何解决?
    Servlet/JSP vs. ASP.NET MVC
    Ubuntu Linux 上安装Apache的过程
    Ubuntu Linux 上安装Eclipse的过程
    sudo的意义
    Dependency Injection
    Ubuntu Linux 上安装TomCat的过程
  • 原文地址:https://www.cnblogs.com/SuperBing/p/4963073.html
Copyright © 2011-2022 走看看