GreenDao3.0的使用一

项目中需要用到数据库的存储,以前用到数据库很少,so去问了问度娘,找到了GreenDao

      直接使用原生SQLite,需要编写sql语句和解析查询结果,这是一个相当乏味和耗时的工作。GreenDAO通过将Java对象映射到数据库表(称为ORM,对象关系映射)将我们从其中解脱出来。通过简单的面向对象API,你就可以来存储,更新,删除和查询Java对象了。

目录:

一、GreenDAO的配置

二、编码实例

1、建立实体类

2、实体类各注解的意思

3、多表关联

正文:

      一.接下来说哈,GreenDAO的配置。

1、在build.gradle(总)添加 :classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0',如下图:

 
2、app里的build.gradle内需添加的以下内容:
1)添加apply plugin: 'org.greenrobot.greendao'
2)导入相应的包:compile 'org.greenrobot:greendao:3.1.0',
3)greendao{
    schemaVersion 5(版本号)
    targetGenDir 'src/main/java'(自动生成代码的目录)
    daoPackage    'com.ppjun.greendaotest.db'(自动生成代码包名)
}
如果不添加3)项也可以,那样因GreenDAO自动生成的代码将会生成在build – generated—greendao目录下。
4)build.gradle整体结构,如下图:

到此,GreenDAO的配置基本结束。
二.GreenDAO编码实例
             1、建立实体,如下
@Entity
public class Equipment {
    @Id
    private long mach_id;
    //隶属店名
@Property(nameInDb = "machine_shop")
@NotNull
@Unique
    private long machine_shop;
    //是否在线 0 代表不在线 1代表在线
    private long link_status;
    @ToMany(referencedJoinProperty = "equipmentId")
    private List<Cigarate> cigList;
    @Transient
    private String extraField;
}
 
2、各注解的意思
@Entity 注解表示这个实体类会在数据库中生成对应的表
@Id表示关键字ID,该类型必须是long或Long类型,可以通过@Id(autoincrement = true)设置自增长 
@Property 表示该属性将作为表中的一个字段,nameInDb即在表中的字段名
@Transient 该注解表示这个属性将不会作为表中的一个字段
@NotNull表示该字段不能为空
@Unique 表示该字段唯一,值不能重复
3、多表关联时:
3.1、@ToOne:定义与单个实体对象的关系
代码:
@Entity
public class Equip {
    @Id
    private long mach_id;
    //设备Mac
    private String machine_uuid;
    //关联字段
    private long cigaId;
    @ToOne(joinProperty = "cigaId")
    private Ciga ciga;
}
 
@Entity
public class Ciga {
    @Id
    private long cig_id;
    //添加时间
    private long add_date;
    //烟类型 0:异型烟 1:细支烟2:常规烟
    private String cig_types;
    //名称
    private String cigarettes_name;
}
joinProperty参数 定义一个外键。
通过Equip 获取Ciga 只要调用getCiga()方法即可获取Equip对应的Ciga。
3.2、@ToMany 定义与多个实体对象的关系
方式一,代码如下
@Entity
public class Equipment {
    @Id
    private long mach_id;
    //设备Mac
    private String machine_uuid;
    @ToMany(referencedJoinProperty = "equipmentId")
    private List<Cigarate> cigList;
}
@Entity
public class Cigarate {
    @Id
    private long cig_id;
    //添加时间
    private long add_date;
    //烟类型 0:异型烟 1:细支烟2:常规烟
    private String cig_types;
    //名称
    private String cigarettes_name;
    //外键
    private long equipmentId;
}
 
referencedJoinProperty:在目标实体即Cigarate中定义一个与源实体即Equipment关联起来的外键,即Cigarate中的equipmentId。
方式二,代码如下:
@Entity
public class Equipment {
    @Id
    private long mach_id;
    //设备Mac
    private String machine_uuid;
    @Unique
    private String tag;
    @ToMany(joinProperties = {
            @JoinProperty(name = "tag",referencedName = "equipmentTag")
    })
    private List<Cigarate> cigList;
}
@Entity
public class Cigarate {
    @Id
    private long cig_id;
    //添加时间
    private long add_date;
    //烟类型 0:异型烟 1:细支烟2:常规烟
    private String cig_types;
    //名称
    private String cigarettes_name;
    private String equipmentTag;
}
这里关联由方式一的关键字变为表中的一个唯一的列名。(当然
joinProperties = {
            @JoinProperty(name = "tag",referencedName = "equipmentTag")
})也可以写成
joinProperties = {
            @JoinProperty(name = "mach_id",referencedName = "equipmentId")
})
注意:获取cigaList的方式

3.3 关联表的更新与解析
关联表查询是懒加载,而且查询结果会放到缓存中,也就是说第一次查询会查数据库,后来则会直接从缓存中去找。
当然,如果数据add或者update等等时则需要更新关联表中的对象或者清除缓存。
以上主要说了greenDao3.0配置、实体类的建立以及一些属性的使用,以后还会总结下greenDao增删改查语句的使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值