1.配置依賴
implementation 'org.greenrobot:greendao:3.2.0'
implementation 'org.greenrobot:greendao-generator:3.2.0'
~project的build.gradle 的buildscript-->dependencies添加
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
2.編譯一下,會自動生成三個文件
BannerItemDao、DaoMaster、DaoSession
這三個存放目錄配置在module的build.gradle文件里的android下。eg:
apply plugin: 'org.greenrobot.greendao' // apply plugin
android {
...忽略
greendao {
schemaVersion 1 // 數據庫的版本號
daoPackage 'com.test.dao' // 包名
targetGenDir 'src/main/java' // 存放的目錄地址
}
}
2.配置完成后使用方法
1.在自己建的實體類中 @Entity 類名上面
2.實體類中必須要有id是Long類型
@Entity
public class Student {
@Id(autoincrement = true)
private Long id;
3.然后錘一下會自動生成三個文件
BannerItemDao、DaoMaster、DaoSession
4.實現對數據庫的操控(開始制作工具類)
1.創建一個類App繼承Application
public class App extends Application {
public static App app;
public static App getApp() {
return app;
}
@Override
public void onCreate() {
super.onCreate();
app=this;
}
}
2.在清單文件中申請
android:name="com.test.dao.App"
3.創建一個類MyDataBaseHelper工具類的生成
public class MyDataBaseHelper {
private static MyDataBaseHelper myDataBaseHelper;
private final StudentDao studentDao;
private MyDataBaseHelper(){
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(App.getApp(), "sdas");
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
DaoSession daoSession = daoMaster.newSession();
studentDao = daoSession.getStudentDao();
}
public static MyDataBaseHelper getInstance(){
if(myDataBaseHelper == null){
synchronized (MyDataBaseHelper.class){
if(myDataBaseHelper == null){
myDataBaseHelper = new MyDataBaseHelper();
}
}
}
return myDataBaseHelper;
}
public void insertList(List<Student> list){ //插入多個數據(集合)
studentDao.insertInTx(list);
}
public void insert(Student student){//插入1個對象
studentDao.insert(student);
}
public void deleteAll(){ //刪除全部
studentDao.deleteAll();
}
public void delete(Student student) { //刪除一個
studentDao.delete(student);
}
public void updateAll(List<Student> list){ //更改全部
studentDao.updateInTx(list);
}
public void update(Student student){ //更改一個
studentDao.update(student);
}
public List<Student> queryAll(){ //查詢所有
return studentDao.queryBuilder().list();
}
public List<Student> queryWhere(String name , int age){ //按條件查詢 可多個條件查詢 gt
return studentDao.queryBuilder().where(StudentDao.Properties.Name.eq(name),StudentDao.Properties.Age.gt(age)).list();
// 查詢名字相等
}
public Student query(String name, int age){ //查詢一個對象
return studentDao.queryBuilder().where(StudentDao.Properties.Name.eq(name),StudentDao.Properties.Age.gt(age)).unique();
}
public boolean isExist(int id){
Student unique = studentDao.queryBuilder().where(StudentDao.Properties.Id.eq(id)).unique();
if(unique == null){
return true;
}
return false;
}
}
4.使用時只需要調用myDataBaseHelper.getInstance. inset ... 就可以實現對數據庫的增刪改查
相關注解說明:
實體@Entity注解
schema:告知GreenDao當前實體屬于哪個schema
active:標記一個實體處于活躍狀態,活動實體有更新、刪除和刷新方法
nameInDb:在數據庫中使用的別名,默認使用的是實體的類名
indexes:定義索引,可以跨越多個列
createInDb:標記創建數據庫表
基礎屬性注解
@Id:主鍵 Long 型,可以通過@Id(autoincrement = true)設置自增長
@Property:設置一個非默認關系映射所對應的列名,默認是使用字段名,例如:@Property(nameInDb = "name")
@NotNull:設置數據庫表當前列不能為空
@Transient:添加此標記后不會生成數據庫表的列
索引注解
@Index:使用@Index作為一個屬性來創建一個索引,通過name設置索引別名,也可以通過unique給索引添加約束
@Unique:向數據庫添加了一個唯一的約束
關系注解
@ToOne:定義與另一個實體(一個實體對象)的關系
@ToMany:定義與多個實體對象的關系
二. 為什么使用greenDAO
體積小(100k不到)
性能最大化
內存開銷最小化
易于使用的 API
支持數據庫加密