安卓 日常问题 工作日志12

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















posted on 2020-04-07 10:25  读书台  阅读(269)  评论(0编辑  收藏  举报

导航