【Android开发--新手必看篇】依赖框架GreenDao的使用

Android笔记

​ ——GreenDao
若对该知识点有更多想了解的,欢迎私信博主~~

依赖框架:GreenDao
一:优势及作用
  1. 高性能;
  2. 易于使用的强大API,涵盖关系和连接;
  3. 最小的内存消耗;
  4. 小库大小(<100KB)以保持较低的构建时间并避免65k方法限制;
  5. 数据库加密:greenDAO支持SQLCipher,以确保用户的数据安全;
二:GreenDao的配置
  1. 总build.gradle中添加(注入依赖)

    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
    }
    
  2. 分build.gradle顶部添加插件

    apply plugin: 'org.greenrobot.greendao'
    
  3. 分build.gradle中添加(注入依赖)

    dependencies {
    	implementation 'org.greenrobot:greendao:3.2.2'
    }
    
  4. 分build.gradle中配置GreenDao信息

    android {
        greendao{
            //数据库版本号,升级时修改
            schemaVersion 1
            //生成的DAO,DaoMaster和DaoSession的包路径。默认与表实体所在的包路径相同
            daoPackage 'lk.greendao.Dao'
            //生成源文件的路径。默认源文件目录是在build目录中的	(build/generated/source/greendao)
            targetGenDir 'src/main/java/'
        }
    }
    
三:使用
  1. 写实体类

    @Entity
    public class Grade {
        @Id(autoincrement = true)
        @Property(nameInDb = "class_id")
        private Long classID;
        @Property(nameInDb = "class_name")
        private String className;
    }
    
    注解:
    1. @Entity注解
      • nameInDb:可自定义表的名称
      • createInDb:标记创建数据库表。
      • generateGettersSetters:是否自动生成属性的getter和setter方法。
    2. 基础属性注解
      1. @Id 主键,必须为Long类型,(autoincrement = true)可自增
      2. @Property 自定义列的名称(nameInDb = “class_id”)
      3. @NotNull 非空
      4. @Transient 表示不会在表中创建列
    3. 索引注解
      1. @Index 设置索引
      2. @Unique 设置唯一约束
    4. 关系注解
      1. @ToOne 定义一对一关系
      2. @ToMany 定义一对多关系
  2. 创建好实体类后重新加载,即可看到自动生成代码

  3. 定义一个类方便使用GreenDao

    import android.app.Application;
    import android.database.sqlite.SQLiteDatabase;
    
    public class MyApplication extends Application {
        DaoSession daoSession;
    
        @Override
        public void onCreate() {
            super.onCreate();
            initDao();
        }
        //创建DaoSession
        private void initDao(){
            //创建专有SqlOpenHelper
            DaoMaster.DevOpenHelper helper=new DaoMaster.DevOpenHelper(this,"sqlite");
            //创建操作数据库对象
            SQLiteDatabase db=helper.getWritableDatabase();
            //创建db与GreenDao的联系
            DaoMaster daoMaster=new DaoMaster(db);
            //创建管理表对象
            daoSession=daoMaster.newSession();
        }
        //获取DaoSession
        public DaoSession getDaoSession(){
            return daoSession;
        }
    }
    
四:增、删、改、查
  1. 方法说明
    insert()插入单个数据
    insertInTx()批量插入数据
    insertOrReplace()数据存在则替换、不存在则添加
    insertOrReplaceInTx()批量数据存在则替换、不存在则添加
    //insert
    String word="Hello1";
    daoSession.getMessageDao().insert(word);
    //insertInTx()
    List<String> list = new ArrayList<String>() {{
        add("Hello1");
        add("Hello2");
        add("Hello3");
    }};
    daoSession.getMessageDao().insertInTx(list);
    
  2. 删(本质是根据Id删)

    方法说明
    delete()删除单个数据
    deleteByKey()根据主键删除单个数据
    deleteInTx()批量删除数据
    deleteByKeyInTx()根据主键批量删除数据
    deleteAll()删除全部数据
  3. 改(本质是根据Id改)

    方法说明
    update()修改单个数据
    updateInTx()批量修改单个数据
    1. 普通查询

      方法说明
      load()加载单个数据
      loadByRowId()根据rowid加载单个数据
      loadAll()加载全部数据
    2. 高级查询

      方法说明
      queryRaw()参数1:条件语句,参数2:条件值
      queryBuilder()通过QueryBuilder对数据进行操控
      daoSession.getStudentDao().queryBuilder().
          where(StudentDao.Properties.StudentID.eq(1)).list();
      

      queryBuilder()的方法

      方法说明
      where()条件查询
      or()条件或者
      and()条件并且
      join()多表联查
      list()将数据存储到集合中
      orderAsc()根据某个属性升序显示
      orderDesc()根据某个属性降序显示
      orderRaw()根据sql语句排序
      limit()返回前几行,默认从0开始
      offset()偏移量,配合limit使用
      distinct()去除重复数值
      count()总行数

      对Properties【属性】进行筛选的方法

      方法说明
      eq()等于
      notEq()不等于
      like()like查询
      between()取中间范围
      in()=in
      notIn()=not in
      gt()大于
      lt()小于
      ge()大于等于
      le()小于等于
      isNull()为空
      isNotNull()不为空
      利用queryBuilder批量删除
      DeleteQuery<Student> dq
          =daoSession.getStudentDao().queryBuilder().buildDelete();
      dq.executeDeleteWithoutDetachingEntities();
      
参考文档:
  1. https://www.jianshu.com/p/53083f782ea2
  2. https://www.jianshu.com/p/3ee00bd99593
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值