一、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,即在門店的屬性中有:
private List<POS> posList;
private List<Printer> printerList;
這個時候就需要在這兩個屬性前面添加實體之間的關聯,否則在自動生成Dao對象時會報錯,無法識別list.
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;
以上就已經完成開始編譯自動生成。
三、數據庫初始化和增刪改查
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();
}
daoSession 對象爲數據庫操作類,這時候你就可以通過daoSession 對錶進行操作了。PrinterDao printerDao=daoSession.getPrinterDao();
增刪改查不用多說了,只要PrinterDao 類調用相應方法即可。
注意:插入操作,如果表中的唯一屬性已經存在,插入相同數據會報異常,所以在進行插入操作時最好try catch一下。