• 安卓 日常问题 工作日志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















  • 相关阅读:
    5-互评-OO之接口-DAO模式代码阅读及应用
    3.1-互评-OO设计-有理数类的设计
    机器学习(3)
    SpringBoot拦截器注入 Service 为空问题
    阿里强制要求的21条Java开发规范【转载】
    动态规划入门
    图神经网络第一章笔记
    PC端工业应用开发宝典3-数据持久化
    PC端工业应用开发宝典2-兼容性问题
    VUE登陆界面监听回车键响应登陆按钮
  • 原文地址:https://www.cnblogs.com/dushutai/p/12651831.html
Copyright © 2020-2023  润新知