第三方開源庫:資料庫:GreenDao
阿新 • • 發佈:2019-01-31
簡介
GreenDao是一個用於Android開發的物件/關係對映(ORM)工具。它向SQLite資料庫提供了一個物件導向的介面。主要是將物件對映到SQLite資料庫中,GreenDao3.0是greendao的一個新的版本。
真機中沒看到資料庫檔案,查了網上資料,可能是手機沒有root就看不到我們建立的資料庫。
步驟
- 配置GreenDao
- 創阿資料庫管理類
- 增刪改查
Step1:配置GreenDao
步驟
- 配置project的build.gradle
- 配置module的build.gradle
- 新建實體類
- make project 點小錘子
Step1-1:配置project的build.gradle
也可以把這個配置程式碼放在module的build.gradle
中
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
Step1-2:配置module的build.gradle
GreenDao | 含義 |
---|---|
schemaVersion | 資料庫版本號 |
daoPackage | dao所在的包名 |
targetGenDir | 自動生成的資料庫檔案的目錄 |
如果上面不指定目錄的話,資料庫檔案就會生成到build/generated/source/greendao
下面,還需要拷貝到自己的目錄中,所以這裡還是指定生成目錄為好。
apply plugin: 'org.greenrobot.greendao'
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
greendao{
schemaVersion=1
daoPackage 'com.cqc.greendao05.dao.gen'
targetGenDir 'src/main/java'
}
Step1-3:新建實體類
Step1-4:小錘子
點選小錘子(make project)會生成3個數據庫管理類:DaoMaster``DaoSession``PersonInfoDao
,以及PersonInfo
的gets and sets
或:
Step2:創阿資料庫管理類
public class GreenDaoManager {
private DaoMaster.DevOpenHelper helper;
private DaoMaster daoMaster;
private DaoSession daoSession;
private static GreenDaoManager greenDaoManager;
private GreenDaoManager() {
helper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), "GreenDao_DB");
daoMaster = new DaoMaster(helper.getWritableDb());
daoSession = daoMaster.newSession();
}
public static GreenDaoManager getInstance() {
if (greenDaoManager == null) {
greenDaoManager = new GreenDaoManager();
}
return greenDaoManager;
}
public DaoMaster.DevOpenHelper getDevOpenHelper() {
return helper;
}
public DaoMaster getDaoMaster() {
return daoMaster;
}
public DaoSession getDaoSession() {
return daoSession;
}
public void closeDB() {
if (helper != null) {
helper.close();
}
}
}
並在Application
中初始化,別忘了在AndroidManifest.xml
中配置name
。
public class MyApplication extends Application {
private static Context context ;
@Override
public void onCreate() {
super.onCreate();
context = this;
GreenDaoManager.getInstance();
}
public static Context getContext() {
return context;
}
}
Step3:增刪改查
dao是增刪改查的操作類
PersonInfoDao dao = GreenDaoManager.getDaoSession().getPersonInfoDao();
查
由於查詢用的最多,這裡想介紹查詢,GreenDao採用了構造這模式
查詢結果為集合 :
List<PersonInfo> usersList = dao.queryBuilder().build().list();
查詢結果為實體類:where
表示條件
PersonInfo info = dao.queryBuilder().where(PersonInfoDao.Properties.Id.eq(id)).build().unique();
增*
PersonInfo info = new PersonInfo(id, name, age);
dao.insert(info);
刪
刪除一個物件:
PersonInfo info = dao.queryBuilder().where(PersonInfoDao.Properties.Id.eq(id)).build().unique();
dao.delete(info);
刪除多個物件
List<PersonInfo> userList = dao.queryBuilder().where(PersonInfoDao.Properties.Name.eq(name)).build().list();
for (PersonInfo info : userList) {
dao.delete(info);
}
刪除全部資料
dao.deleteAll()
改
先根據條件查詢到資料,再進行修改
String id = et1.getText().toString().trim();
PersonInfo info = dao.queryBuilder().where(PersonInfoDao.Properties.Id.eq(id)).build().unique();
info.setName(info.getName() + "update");
dao.update(info);
註解
註解名稱 | 說明 |
---|---|
schema | 使得GreenDao知道當前實體屬於哪個schema |
active | 標記一個實體處於活動狀態,活動實體有更新、刪除和重新整理方法 |
nameInDb | 在資料中使用的別名,預設使用的是實體的類名 |
indexes | 定義索引,可以跨越多個列 |
createInDb | 標記建立資料庫表 |
@Entity | greendao的一個實體註解,因為有了它,我們的實體類才回被greendao識別並生成一個dao |
@Id | 主鍵 Long型(預設是自增長的)也可以通過@Id(autoincrement = true)設定自增長 |
@NotNull | @NotNull 標記後,表示這個屬性在資料表中的這一列不能為空 |
@Transient | 新增這個標記之後,我們在實體類中的屬性不會自動在資料表中生成這個屬性表示的這一列 |
@Unique | 向資料庫列添加了一個唯一的約束 |
schema | 使得GreenDao知道當前實體屬於哪個schema |
active | 標記一個實體處於活動狀態,活動實體有更新、刪除和重新整理方法 |
nameInDb | 在資料中使用的別名,預設使用的是實體的類名 |
indexes | 定義索引,可以跨越多個列 |
createInDb | 標記建立資料庫表 |
@Property | 設定一個非預設關係對映所對應的列名,預設是的使用欄位名 比如:@Property (nameInDb=”name”) |
@Index | 使用@Index作為一個屬性來建立一個索引,通過name設定索引別名,也可以通過unique給索引新增約束 |
@ToOne | 定義與另一個實體(一個實體物件)的關係,即一對一 |
@ToMany | 定義與多個實體物件的關係 即一對多 |
@JoinEntity | 多對多 |
referencedJoinProperty | 指定目標實體中與源實體相對應的外來鍵 |
joinProperty | 對於複雜一點的關係可以定義一組@JoinProperty註解。每個@JoinProperty註解都需要有源實體中的源屬性和對應實體中的引用屬性。 |
問題
1(table PERSON_INFO has no column named SEX (code 1): …
開始沒有sex屬性,執行正確,再新增sex屬性,點選,結果報錯。
報錯截圖:
報錯的資訊是:沒有sex這一列,但是我已經添加了,無論是PersonInfo
,還是PersonInfoDao
,都有sex.
那麼問題出在哪裡呢。
解決方法:
解除安裝原app,在執行程式碼即可解決。所以我覺得是AS的問題。