GreenDao的基本使用及实例

基础配置

Project moudle配置
       buildscript {
        repositories {
        jcenter()
        }
        dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
        }
        }
  • APP moudle配置
       apply plugin: 'com.android.application'
        apply plugin: 'org.greenrobot.greendao'
  • dependiceis
      compile 'org.greenrobot:greendao:3.2.0'
  • app moudle 可选配置
      //不配置会有默认的路径,也可以指定路径
        greendao {
        schemaVersion 1 //数据库版本号(3.0版)
         daoPackage 'com.comer.doctor.greendao'//设置DaoMaster、DaoSession、Dao包名
         targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
        }

开始看到这里我是懵逼的,按照它提示的怎么搞都不行,最终是更改了gradle的版本,原本是2.2的更新到最新的3.3就灭有问题了,至于gradle的版本更新我就不多说了,

1. 是更改插件版本      classpath 'com.android.tools.build:gradle:2.3.0'
2. 更改配置的版本号  distributionUrl=https://services.gradle.org/distributions/gradle-3.3-all.zip
(在 gradle-wrapper.properties 里面)
3. 最好手动的吧gradle文件拷贝到 android studio的gradle 文件夹下
    D:\Program Files\Android\Android Studio2.1.3\gradle(sudio安装路径里面)

基本使用

  1. 构建实体类。
    其实实体类中的字段通过greendao的构建自动会生成表的字段名称
    1.1我们可以选择有字段但是不在数据中有这字段,可以通过 @Transient 实现
       @Entity
            public class ClinicSysValidate {
            @Id   //主键,可以自己设定,也可以设置成autoincrement自增长
               public long ID ;
            /// 表单编码,留空则为基础配置项
            public String FormCode ;
            /// 字段编码
            @Transient    //数据库不会有的字段
            public String FieldCode ;
            /// 字段名称
              @peoperty  //数据库的字段,默认可以不写,默认会添加到数据库里
              public String FieldName ;
              @toMany referencedJoinProperty = "ownerId")  /   ***/构建关系表,ownerId在关联表里一定要有,类型一定要一样!***
              连着 两个表,因为是集合所以需要
              一对多  也可以使用 @toOne 一对一
            public List uses;
            }
  • 基础属性注解

@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名举例:@Property (nameInDb=”name”)
@NotNul:设置数据库表当前列不能为空
@Transient:添加次标记之后不会生成数据库表的列

  • 索引注解

@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique:向数据库列添加了一个唯一的约束

  • 关系注解

@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMany:定义与多个实体对象的关系

  • @Entity 定义实体
    @nameInDb 在数据库中的名字,如不写则为实体中类名
    @indexes 索引
    @createInDb 是否创建表,默认为true,false时不创建
    @schema 指定架构名称为实体
    @active 无论是更新生成都刷新
    (二) @Id
    (三) @NotNull 不为null
    (四) @Unique 唯一约束
    (五) @ToMany 一对多
    (六) @OrderBy 排序
    (七) @ToOne 一对一
    (八) @Transient 不存储在数据库中
    (九) @generated 由greendao产生的构造函数或方法

封装工具类

  • 根据自己的实际情况封装greendao初始化以及增删改查的方法!
      public class DaoUtils {
        //数据库的查询码
        public static DaoSession sDaoSession;
        public static DaoSession initDao(Context context) {
        DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(context, Constant.DBName);
        Database database = openHelper.getWritableDb();
        DaoMaster daoMaster = new DaoMaster(database);
        sDaoSession = daoMaster.newSession();
        return sDaoSession;
    }

    public static DaoSession getDaoSession(Context context) {
        if (sDaoSession == null) {
            initDao(context);
        }
        return sDaoSession;
    }

    //根据主键获取对象
    public static List getSysValidate(Context context, String fromCode) {
        ClinicSysValidateDao dao = getDaoSession(context).getClinicSysValidateDao();
        return dao.queryBuilder().where(ClinicSysValidateDao.Properties.FormCode.eq(fromCode)).list();
        //查询的时候是根据字Properties来查的也就是你的字段名称,当然表里面的字段名称都是大写的可能和看到的
        //不一样  同时还有排序等方法拿到有序的集合!
    }

    //获取最后更新时间
    public static String getLastEditTime(Context context) {
        ClinicSysValidateDao dao = getDaoSession(context).getClinicSysValidateDao();
        List lastTimes = dao.queryBuilder().list();
        if (lastTimes != null && lastTimes.size() > 0) {
            return lastTimes.get(0).LastEditTime;
        } else {
            return "";
        }
    }

    //数据库查看是否存在
    public static boolean isExist(Context context, long id) {
        ClinicSysValidateDao dao = getDaoSession(context).getClinicSysValidateDao();
        ClinicSysValidate clinicSysValidate = dao.load(id);
        return clinicSysValidate==null? false:true;
    }
    //数据更新操作
    public static void updateData(Context context,ClinicSysValidate clinicSysValidate){
        ClinicSysValidateDao dao = getDaoSession(context).getClinicSysValidateDao();
        if(isExist(context,clinicSysValidate.ID)){
            dao.update(clinicSysValidate);
        }else{
            dao.insert(clinicSysValidate);
        }
    }
    }

你可能感兴趣的:(Android进阶)