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(); <br>entity.addToOne(Customer, property);
@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 如果你在做多对多的关系,有其他的表或实体参与,可以给目标属性添加这个额外的注解
暂时先这样吧