GreenDao的基本使用及实例

来源:互联网 发布:vb调用bartender 实例 编辑:程序博客网 时间:2024/04/28 11:35

基础配置

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<Users> 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<ClinicSysValidate> 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<ClinicSysValidate> 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);        }    }    }
原创粉丝点击