一、greendao 3.2配置
1、project gradle里面添加配置:
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
//GreenDao3依赖
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
2、module gradle引入:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'org.greenrobot:greendao:3.2.0'//greendao 3.2配置
compile 'com.google.code.gson:gson:2.7'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile 'com.google.android.gms:play-services-appindexing:8.4.0'
3、module gradle配置:
//greendao配置
greendao {
//版本号,升级时可配置
schemaVersion 1
daoPackage 'kimweng.cuscapi.com.greendao.db'//产生的DaoMaster等所在的包名
targetGenDir 'src/main/java'//包名所在路径}
4、最后别忘了在module gradle添加
apply plugin: 'org.greenrobot.greendao'
二、定义实体类:
(标签的使用在下面会讲解:)
package kimweng.cuscapi.com.greendao; import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.NotNull; import org.greenrobot.greendao.annotation.Unique; import static android.R.string.no; import org.greenrobot.greendao.annotation.Generated; /** * Created by admin on 2017/7/5. */ @Entity public class Printer { @NotNull private long storeId; @NotNull private String printerType; @Unique private String printerIp; @NotNull private String printerName public String getPrinterIp() { return printerIp; } public void setPrinterIp(String printerIp) { this.printerIp = printerIp; } public String getPrinterType() { return printerType; } public void setPrinterType(String printerType) { this.printerType = printerType; } public String getPrinterName() { return printerName; } public void setPrinterName(String printerName) { this.printerName = printerName; } public long getStoreId() { return storeId; } public void setStoreId(long storeId) { this.storeId = storeId; } }
标签:* A、 @Entity用于描述实体类名,其中active表示update/delete/refresh 方法是否自动生成,默认为false. createInDb表示是否在数据库中创建表,默认为true,如果为false,将不创建该表. generateConstructors表示是否自动生成构造方法(一个有参构造,一个无参构造). indexes表示制定查询数据返回的默认排序规则.(@Index中的value制定排序的数据表中的列明加上排序规则即(ASC/DESC), name表示......,unique表示是否唯一即SQL中的去重复 如果按照多个字段来排序可以这样(比如(indexes={@Index(value="ID ASC"),@Index(value="AGE DESC")}或者 indexes={@Index(value="ID ASC AGE DESC")}))) nameInDb表示该实体对应的数据表的名称,默认为实体名的拼音全大写 generateGettersSetters表示是否自动生成get/set方法,默认为true B、@Id表示该字段是主键,autoincrement表示是否自增,默认为false. C、@Property用于描述字段,nameInDb表示该字段在数据表中对应的列名,默认是实体字段名称. D、@NotNull表示该字段不为null. E、@Transient 表示在创建数据表时候忽略这个字段,也就是在创建表的时候不会创建这个字段. F、@ToOne表示一对一的关系,也就是多条这个实体只对应一条标识的实体joinProperty标识这个实体表中的哪个字段和标识的实体表的主键关联. G、@ToMany标识一对多的关系,也就是一条该实体数据通过指定列名和标识的数据实体的指定列名对应关系(@referencedJoinProperty表示当前标识的实体对应的数据表的 主键,@joinProperties表示当前表和标识的实体对应的数据表的属性对应关系) H、@Convert定义当前标识的实体和数据表中字段之间装换规则.converter表示转换器.columnType表示对应的数据表列名在表中的数据类型,
标签里面重点讲一下@ToMany表示表中实体之间的相互关联,比如说一个门店有N个POS点餐设备,每个POS设备又可以连接多个printer,即在门店的属性中有:
这个时候就需要在这两个属性前面添加实体之间的关联,否则在自动生成Dao对象时会报错,无法识别list.private List<POS> posList; private List<Printer> printerList;
ToMany类里面有两种关联:referencedJoinProperty和joinProperties
referencedJoinProperty是指list里面的实体类的外键为当前类的主键,即参数值需要填写list里面的实体类属性名;
joinProperties是指都不为空的两个属性之间联系,name为当前类属性,referencedName为list实体里与之对应的属性名。
事例代码:
以上就已经完成开始编译自动生成。@ToMany(joinProperties = {@JoinProperty(name = "storeId",referencedName = "storeId")}) private List<Printer> printerList; @ToMany(joinProperties = {@JoinProperty(name ="storeId",referencedName = "storeId")}) private List<POS> posList;
三、数据库初始化和增删改查
daoSession 对象为数据库操作类,这时候你就可以通过daoSession 对表进行操作了。private void initDB(){ DaoMaster.DevOpenHelper helper=new DaoMaster.DevOpenHelper(this,"store.db",null); //获取可写数据库 SQLiteDatabase db = helper.getWritableDatabase(); //获取数据库对象 DaoMaster daoMaster = new DaoMaster(db); //获取Dao对象管理者 daoSession = daoMaster.newSession(); }
PrinterDao printerDao=daoSession.getPrinterDao();
增删改查不用多说了,只要PrinterDao 类调用相应方法即可。注意:插入操作,如果表中的唯一属性已经存在,插入相同数据会报异常,所以在进行插入操作时最好try catch一下。