基础配置
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安装路径里面)
基本使用
- 构建实体类。
其实实体类中的字段通过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);
}
}
}