GAE 云服务--数据定义

以下内容出自GAE_GWT入门指南,我只是做了下学习笔记。   

定义数据类。

        我们要成功定义一个数据类,需要注意很多事情,否则在使用时候会发现无故报错,无法保存。需要注意一下事项。

 1,类和字段批注。 

       成功声明一个类,字段批准是必须的。JDO保存每个对象都将成为App Engine数据存储区的实体。类的每个持久字段

       代表实体的的一个属性。要将java类声明为为能够通过JDO在数据存储区中存储或检索,我们必须指定@PersistenceCapable批注。

        例如

      

import javax.jdo.annotations.PersistenceCapable;

@PersistenceCapable(identityType=IndentityType.APPLICATION)
public class Employee {

}
    要存储到数据存储区中的数据类的字段必须声明为持久字段(@Persistent)

    不保存到数据存储区,也不会在检索对象时还原,@NotPersistent

import javax.jdo.annotations.NotPersistent;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;

@PersistenceCapable(identityType=IndentityType.APPLICATION)
public class Employee {
	/** 持久化*/
    @Persistent
    private Date hireDate;
    /** 非持久化*/
    @NotPersistent
    private Date age;
}
    数据类必须具有一个专门用于数据存储相应的数据存储区实体的主键字段。

   主键使用@PrimaryKey批注,自动填充需要批注。

   @PrimaryKey 和@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)

 请将我们所有的持久字段指定为private 或者 protected,且只通过访问器方法提供公共访问,这样符合相应的规范需求。

    

import javax.jdo.annotations.NotPersistent;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;

@PersistenceCapable(identityType=IndentityType.APPLICATION)
public class Employee {
    @Persistent
    private long id;
    
    @Persistent
    private String fistName;
    
    @Persistent
    private String lastName;
    
    @Persistent
    private String hireDate;

	public Employee(long id, String fistName, String lastName, String hireDate) {
		this.id = id;
		this.fistName = fistName;
		this.lastName = lastName;
		this.hireDate = hireDate;
	}

	 /**Accessors for the fields.JDO doen't use these,but your application does*/
	
	public String getFistName() {
		return fistName;
	}

	public void setFistName(String fistName) {
		this.fistName = fistName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getHireDate() {
		return hireDate;
	}

	public void setHireDate(String hireDate) {
		this.hireDate = hireDate;
	}
    
   
    
}
 

二  核心值类型

     AppEngine支持的数据类型很多,基本数据的数据都支持。

     



三 数据的父子关系。

     在操作数据时,通常会遇到两个数据类型中,一个数据类型中包含另外一个声明的数据类型。

     如果只是单个的包含,那么两个数据实例之间是一对一的关系,如果是集合,就是创建的数

      据就是一对多的关系,以下是employee对象和contactInfo对象,他们是一对一的关系。

      

public class Employee {
    @Persistent (valueStrategy=IdGeneratorStrategy.IDENTITY)
    private Key key;
    @Persistent
    private ContactInfo myContactInfo;
    @Persistent
    private String fistName;
 
public class ContactInfo {
    @PrimaryKey (valueStrategy=IdGeneratorStrategy.IDENTITY)
    private Key key;
    在此例中,Employee和myContactInfo是一一对应关系,Employee是父,myContactInfo是子。

    myContactInfo相当于Employee中的一个常规数据类型,myContacInfo和employee的主键都用

    父类实体employee对象中的主键。

四,嵌入类

             通过嵌入类,可以使用类来建模字段值,无需创建新的数据存储区实体并形成关系,该对象的

       字段之间存储在含有对象的数据存储区实体中。

             任何@PersistenceCapable数据类都可以作用于另一个数据类中的嵌入对象。类的@Persistent

       字段嵌入到对象中,如果让类嵌入@EmbeddedOnly批注,则类只能用作嵌入类,嵌入类不需要主键

       字段,因为他不作为单独实体存储。

              

public class EmployeeContacts {
	@PrimaryKey
    
	@Persistent (valueStrategy=IdGeneratorStrategy.IDENTITY)
    private Long id;
    
	@PersistenceCapable
	
	@EmbeddedOnly
	
	public static class ContackInfo
	{
		@Persistent
		private String streetAddress;
		
		@Persistent
	    private String city;
		
		@Persistent
		private String stateOrProvince;
		
		@Persistent
		private String zipCode;
		
	}
	@Persistent
	/××批注指定新的字段名称×/
	@Embedded  
	private ContactInfo homeContactInfo;
    @Persistent
    @Embedded(members={
    	@Persistent(name="streetAddress",columns @Column(name="wrokStreetAddress")),
    	@Persistent(name="city",column(name="workCity")),
    	@Persistent(name="stateOrProvince",columns @Coloumn(name="workStateOrProvince")),
    	    });
	private ContactInfo workContactInfo;
    
}
      类似的对象上的字段不可以使用与嵌入类的字段冲突的名称,除非重命名嵌入字段。

集合:

       一个数据存储区属性可以具有多个值,形成一对多的关系,基本数据类型有:

      java.util.ArrayList      HashSet     LinkedHashSet    LinkedLIist    List   set    sortedSet

       java.util.HashSet

       java.util.LinkedHashSet

        java.util.LinkedLIist    

java.util.List   

java.util.set    

java.util.sortedSet

java.util.stack

java.util.Treeset

  java.util.Vector

      如果某个字段声明为list,则数据存储区返回的对象具有ArrayList值。

      如果某个字段声明为set,则数据存储区返回的对象具有HashSet值。

     如果某个字段声明为sortedSet,则数据存储区返回的对象具有TreeSet值。

    例如,类型为list<String>的字段存储为属性的零个或多个字符串值,每一个对应于list中的一个值。

      

     import java.util.list;
      @Persistent
     List<String> favoriteFoods;
   
数据定义总结,
       关注的是批注,每个批注都有自己的意义,如果没有批注,数据将无法保存到数据库中。
       数据之间的关系有一对一,一对多,嵌套。在子的数据类型的键,应该定义成key这种数据类型,
       因为子的键要包含父的键,形成对应的关联。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值