greenDao的注解详解 https://www.jianshu.com/p/d61983df2341 ,https://segmentfault.com/a/1190000009138617
- @Id :主键 long/Long型,可以通过@Id(autoincrement = true)设置自增长
- @Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=”name”)
- @NotNul:设置数据库表当前列不能为空
- @Transient :添加次标记之后不会生成数据库表的列
1.)索引注解
- @Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
- @Unique:向数据库列添加了一个唯一的约束
2.)关系注解
- @ToOne:定义与另一个实体(一个实体对象)的关系
- @ToMany:定义与多个实体对象的关系
重点讲解 1对1 ,1对多 ,多对多 ,树状关系
代码 举例
@Entity
public class LandForm {
@Id(autoincrement = true)//表示自增 ture表示自增 false 表示不自增
private Long id;
private String unify_no;//统一编号
private String working_code;//野外编号
private Double longitude;//经度
private Double latitude;//纬度
private Double altitude;//高程
private String structured_address;//结构化地址
private String detailed_address;//详细地址
private String weather;//天气状况
private Date investigation_date;//调查日期
private String investigation_type;//调查类型
private String environmental_problems;//环境地质问题
private String geomorphology_description;//地形地貌
private String geology_description;//地质描述
private String remarks;//备注
private String investigator;//调查人
private String reporter;//记录人
private String checker;//审核人
private String device_id;//设备编号
// 新增的数据库字段
private Long watersample_id;//水样采样
@ToOne(joinProperty = "watersample_id") //建立多表连接
private WaterSample waterSample;
//1对1 这里 时 通过 joinProperty 使用id属性 去关联另一个表 从而获取 使用form=mSession.getLandFormDao().loadDeep(landFromIdFragment)方法 通过id去获取 两个表的内容
private Long soilsample_id;//土样采样
@ToOne(joinProperty = "soilsample_id") //建立多表连接 1对1 两个表之间的连接
private SoilSample soilSample;
//1对多的 连接 时用户name的属性 查询其它表referencedName的 将两个属性的值相等的 数据返回 并将返回的数据@OrderBy("id ASC")用id去排序变成list《》形式返回
private String imagetype_id;//landforms + "." + id 照片
@ToMany(joinProperties = { //@ToMany 定义与多个实体对象的关系 joinProperties用来定义外键实现表的1对1 或 1 对多
//表之间的连接 用一个表images 关联另一个表image_type
@JoinProperty(name = "imagetype_id", referencedName = "image_type")
//name = "imagetype_id"当前表格的属性 referencedName = "image_type" 作为外键
//意思是这两个的数据是一样的 到调用时 利用imagetype_id的属性 可以查询另一个表格image_type属性里数值一样的所有数据并返回
})
@OrderBy("id ASC")
private List<Image> LandformsImages;//照片 两个表的链接 一对多 最好改为 LandformsImages 对应上面的多个照片id 变成一个数组返回
// 平面图的照片 通过 location_map去查询
private String location_map;//landmap + "." + id
@ToMany(joinProperties = {
@JoinProperty(name = "location_map", referencedName = "image_type")
})
@OrderBy("id ASC")
private List<Image> LandMapImages;//照片 更改为WaterMapImages
//新增 视频排拍摄
private String video;//videos + "." + id
@ToMany(joinProperties = {
@JoinProperty(name = "video", referencedName = "video_type")
})
@OrderBy("id ASC")
private List<Video> LandVideos;//地质点视频
private Long LandInventoryProjectId;//项目Id
多对多 使用@JoinEntity 具体格式如下
多对多关系就是 以产品和订单 举例 产品表里 可对应多个订单 1 个订单 可以对应多种产品 所以中间需要一个 订单明细表 在中间链接
@Entity
public class Student {
@Id
private String id;
private String name;
private int age;
@ToMany
@JoinEntity(
entity = Join.class,
sourceProperty = "studentId",
targetProperty = "scoreId"
)
private List<Score> scores;
}
@Entity
public class Join { //关系链接表
@Id
private String id;
private String studentId;
private String scoreId;
}
@Entity
public class Score {
@Id
private String id;
private int score;
private String type;
private String studentId;
}
树状关系
@Entity
public class TreeNode {
@Id
private Long id;
private Long parentId;
@ToOne(joinProperty = "parentId")
private TreeNode parent;
@ToMany(referencedJoinProperty = "parentId")
private List<TreeNode> children;
}
greendao的 数据刷新问题
到存在于tomany时 一对多表时 在进行 删除 更新数据时 会发现 数据没有变 这是因为 greenDao的缓存机制 程序会优先使用缓存内的数据 从而导致 无法更新
此时使用
project.resetMeasureAreas();
List<MeasureAreas> measureDistances = project.getMeasureAreas(); //因为
就是使用 rest()方法去跟新数据 然后 使用get获取
这样数据就是最新的了 切记 很管用
参考文献
https://www.cnblogs.com/zhaoxia0815/articles/7244785.html