美文网首页
GreenDAO详解

GreenDAO详解

作者: quanCN | 来源:发表于2019-05-14 00:18 被阅读0次

    简介

    greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。
    官方文档

    项目搭建

    • Gradle引入jar包
      app/build.gradle文件中加入
      implementation 'org.greenrobot:greendao:3.2.2'
      
    • 安装Gradle插件
      在根目录下build.gradle文件中加入
      buildscript {
          dependencies {
              classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
          }
      }
      
      app/build.gradle文件中加入
      apply plugin: 'org.greenrobot.greendao'
      
    • 设置数据库版本!!!
      app/build.gradle文件中加入
      android {
      ...
      }
      greendao {
          schemaVersion 2
      }
      
      greendao配置元素支持许多配置选项
      schemaVersion:数据库模式的当前版本。如果更改实体/数据库架构,则必须增加此值!!!!默认为1。
      daoPackage:生成的DAO,DaoMaster和DaoSession的包名。 默认为源实体的包名称。
      targetGenDir:应存储生成的源的位置。 默认为构建目录( build/generated/source/greendao中生成的源文件夹。
      generateTests:设置为true以自动生成单元测试。
      targetGenDirTests:应存储生成的单元测试的基本目录。默认为 src/androidTest/java
    • 检验
      随便创建一个javaBean
      @Entity
      public class Person {
          @Id
          private Long id;
          private String name;
      }
      
      注意:不需要写getter,setter方法和构造方法!!!
      Rebuild Project存在DaoMaster类即为成功

    核心类

    • DaoMaster
      DaoMastergreenDAO使用入口,DAOMaster包含数据库对象(sqliteDatabase),管理DAO类(不是对象)。可以创建删除表,其内部类OpenHelperDevOpenHelperSQLiteOpenHelper实现。
    • DaoSession
      管理所有可用DAO对象,通过getter方法获取指定DAO对象。提供了像insert,load,update,refreshdelete这样的方法
    • DAOs
      数据访问对象(DAO)
    • Entities
      javaBean/pojo对象

    GreenDao初始化

    • 扩展Application添加DaoSession对象
      public class App extends Application {
          private DaoSession daoSession;
          @Override
          public void onCreate() {
              super.onCreate();
              DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "person-db");
              SQLiteDatabase db = helper.getWritableDb();
              daoSession = new DaoMaster(db).newSession();
          }
          public DaoSession getDaoSession() {
              return daoSession;
          }
      }
      
    • AndroidManifest文件中指定自定义的Application
      <application
          android:name=".App">
      </application>
      
    • 这样即可在任意ActivityFragment中获得指定DAO
      DaoSession daoSession = ((App) getApplication()).getDaoSession(); 
      PersonDao personDao = daoSession.getPersonDao();
      

    配置javaBean

    @Entity
    public class Person {
        @Id
        private Long id;
        @NotNull
        private String name;
    }
    
    • @Entity注解
      schema:告知GreenDao当前实体属于哪个schema
      active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
      nameInDb:在数据库中使用的别名,默认使用的是实体的类名
      indexes:定义索引,可以跨越多个列
      createInDb:标记创建数据库表
    • 基础属性注解
      @Id:主键 Long/long 型,可以通过@Id(autoincrement = true)设置自增长
      @Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name")
      @NotNull:设置数据库表当前列不能为空
      @Transient:添加此标记后不会生成数据库表的列
    • 索引注解
      @Index:为相应的数据库列创建数据库索引,name设置别名,unique添加约束
      @Index(unique = true)
      private String name;
      
      @Unique:添加约束
      @Unique 
      private String name;
      

    注:javaBean发生更改,会创建新的数据表,之前对应数据库表数据也全部删除!!!

    增删改查

    • 增加
      只需要执行DAO对象的insert()方法即可
      personDao.insert(new Person(null,"Tom"));
      
    • 删除
      DAO对象deleteByKey()方法
      personDao.deleteByKey(3L);
      
    • 更改
      DAO对象update()方法
      Person person = new Person(1L,"Ming");
      personDao.update(person);
      
    • 查询
      loadAll()load()进行简单查询
      List<Person> people = personDao.loadAll();
      Log.d("SQLite Data", people+"");
      
      使用QueryBuilder进行复杂查询
      List<Person> people = personDao.queryBuilder().where( PersonDao.Properties.Age.between(16,18)).list(); 
      Log.d("SQLite Data", people+"");
      

    相关文章

      网友评论

          本文标题:GreenDAO详解

          本文链接:https://www.haomeiwen.com/subject/qoadaqtx.html