Greendao(android的數據庫)的使用

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
支持數據庫加密

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。