GreenDao是什么東西這個就不用多說了。自從GreenDao升級到3.0之后,編譯的方法發生了改變。當然這個改變是有助於快速開發的。
區別在哪隨便百度一下都可以知道。這里就不多說了。
這里主要說的是關於3.0之后實體類通過注解的方式使用。
- @Id :主鍵 long/Long型,可以通過@Id(autoincrement = true)設置自增長
- @Property:設置一個非默認關系映射所對應的列名,默認是的使用字段名 舉例:@Property (nameInDb=”name”)
- @NotNul:設置數據庫表當前列不能為空
- @Transient :添加次標記之后不會生成數據庫表的列
1.)索引注解
- @Index:使用@Index作為一個屬性來創建一個索引,通過name設置索引別名,也可以通過unique給索引添加約束
- @Unique:向數據庫列添加了一個唯一的約束
2.)關系注解
- @ToOne:定義與另一個實體(一個實體對象)的關系
- @ToMany:定義與多個實體對象的關系
這里講的是ToOne和ToMany的用法
原來的ToOne是這樣用的:
Property property = entity.addLongProperty("customerId").getProperty(); entity.addToOne(Customer, property);
3.0之后的用法我借用了別人的代碼:
@Entity public class Order { @Id private Long id; private long customerId; @ToOne(joinProperty = "customerId") private Customer customer; } @Entity public class Customer { @Id private Long id; }
這里的意思是 customerId作為外鍵與Customer中的主鍵(也就是id)相連。
舉個例子一個User類里面有個關於用戶頭像地址的參數,我們假設為icon,類型為int。
同時,我們也有一個實體類Picture專門保存icon的數據,id啊,大小啊什么的。在User類里面使用了ToOne,在項目運行的時候,獲取User里面的icon,實際上就是獲取了Picture類里面的數據。大概是這個意思。
接下來說ToMany,這個有點復雜,先引用一下其他人的代碼吧:
@Entity public class User { @Id private Long id; @ToMany(referencedJoinProperty = "ownerId") private List<Site> ownedSites; } @Entity public class Site { @Id private Long id; private long ownerId; } // ---------------------------- @Entity public class User { @Id private Long id; @Unique private String authorTag; @ToMany(joinProperties = { @JoinProperty(name = "authorTag", referencedName = "ownerTag") }) private List<Site> ownedSites; } @Entity public class Site { @Id private Long id; @NotNull private String ownerTag; } // ---------------------------- @Entity public class Site { @Id private Long id; @ToMany @JoinEntity( entity = JoinSiteToUser.class, sourceProperty = "siteId", targetProperty = "userId" ) private List<User> authors; } @Entity public class JoinSiteToUser { @Id private Long id; private Long siteId; private Long userId; } @Entity public class User { @Id private Long id; }
這里根據分割線分成3種的情況
第一種 Site類的ownerId作為外鍵,與User的主鍵相連。
第二種 Site類的ownerId作為外鍵,與User的非主鍵不為空的鍵相連。
第三種。還沒理解。
@ToMany的屬性referencedJoinProperty,類似於外鍵約束。
@JoinProperty 對於更復雜的關系,可以使用這個注解標明目標屬性的源屬性。
@JoinEntity 如果你在做多對多的關系,有其他的表或實體參與,可以給目標屬性添加這個額外的注解
