项目中需要用到数据库的存储,以前用到数据库很少,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增删改查语句的使用。