美文网首页
GreenDao3.2.2集成和基本使用

GreenDao3.2.2集成和基本使用

作者: 九爺丶 | 来源:发表于2018-09-25 13:57 被阅读0次

GreenDao3.2.2集成和基本使用

官方git网址:greenrobot/greenDAO

  • 优点:一个精简的库;性能最大化;最小的内存开销;易于使用的 APIs;支持数据库加密;依赖体积小;强大的社区支持。

集成方式

  1. 在项目的根build.gradle文件里:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}

2.在项目app的build.gradle文件里:

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin 

android {
    ...
}

greendao {
    schemaVersion 1 // 数据库版本号
    daoPackage '如:包名.greendao' //greenDao 自动生成的代码保存的包名
    targetGenDir 'src/main/java' //自动生成的代码存储的路径,默认是 build/generated/source/greendao.
//    generateTests false //true的时候自动生成测试单元
//    targetGenDirTests: 测试单元的生成目录默认是 src/androidTest/java
}


dependencies {
    implementation 'org.greenrobot:greendao:3.2.2' // add library
}

3.创建数据库实体类Bean:

@Entity
public class UserInfo {
    @Id
    private Long id;
    private String name;
    private int age;
    @Generated(hash = 577950320)
    public UserInfo(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    @Generated(hash = 1279772520)
    public UserInfo() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

注意:实体类文件只需要写好变量名,get和set方法是build后自动生成的

  • 实体@Entity注解:
    schema:告知GreenDao当前实体属于哪个schema
    active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
    nameInDb:在数据库中使用的别名,默认使用的是实体的类名
    indexes:定义索引,可以跨越多个列
    createInDb:标记创建数据库表
  • 基础属性注解:
    @Id:主键 Long 型,可以通过@Id(autoincrement = true)设置自增长
    @Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name")
    @NotNull:设置数据库表当前列不能为空
    @Transient:添加此标记后不会生成数据库表的列
  • 索引注解
    @Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
    @Unique:向数据库添加了一个唯一的约束
  • 关系注解
    @ToOne:定义与另一个实体(一个实体对象)的关系
    @ToMany:定义与多个实体对象的关系
  1. 编写还实体类后,点击Build->Make Project,Build完成后 ,会在之前配置的 greenDao 自动生成的代码的指定目录下生成以下三个文件
  • DaoMaster
  • DaoSession
  • UserInfoDao

初始化GreenDao

一般建议在Application中初始化数据库

public class MyAplication extends Application {
    private static APPAplication context;
    public static APPAplication getApplication(){
        return context;
    }

    private DaoMaster.DevOpenHelper mHelper;
    private SQLiteDatabase db;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        context=this;
    
        setDataBase();
    }

    private static final String DATA_BASE_NAME="test-db";
    private void setDataBase() {
        mHelper=new DaoMaster.DevOpenHelper(this,DATA_BASE_NAME,null);
        db=mHelper.getWritableDatabase();
        mDaoMaster=new DaoMaster(db);
        mDaoSession=mDaoMaster.newSession();
    }

    public DaoSession getDaoSession(){
        return mDaoSession;
    }
    public SQLiteDatabase getDb(){
        return db;
    }

}

UserInfoDao infoDao=MyAplication.getApplication().getDaoSession().getUserInfoDao();
        //add
        for (int i=0;i<10;i++){
            if (infoDao.queryBuilder().where(UserInfoDao.Properties.Name.eq("小米"+i)).unique()==null){
            //判断名字是否已存在
                UserInfo userInfo1=new UserInfo(null,"小米"+i,(i*2));
                infoDao.insert(userInfo1);
            }

        }

  • deleteBykey(Long key) :根据主键删除一条记录。
  • delete(UserInfo entity) :根据实体类删除一条记录,一般结合查询方法,查询出一条记录之后删除。
  • deleteAll(): 删除所有记录
UserInfoDao infoDao=MyAplication.getApplication().getDaoSession().getUserInfoDao();

infoDao.deleteByKey(1L);//通过Long型ID删除数据

  • update(UserInfo entity):更新一条记录
UserInfoDao infoDao=MyAplication.getApplication().getDaoSession().getUserInfoDao();

infoDao.update(new UserInfo(1L,"小名",20));

  • loadAll():查询所有记录
  • load(Long key):根据主键查询一条记录
  • queryBuilder().list():返回:List
  • queryBuilder().where(UserDao.Properties.Name.eq("")).list():返回:List
  • queryRaw(String where,String selectionArg):返回:List
UserInfoDao infoDao=MyAplication.getApplication().getDaoSession().getUserInfoDao();

//查询姓名为:‘小米5’的数据
List<UserInfo> list=infoDao.queryBuilder().where(UserInfoDao.Properties.Name.eq("小米5")).build().list();

缓存问题

  • 当修改更新某一条数据后,重新查询会发现查找出来的数据依然是未修改前的数据,这是因为Greendao到数据查询是带缓存的查询,你搜索过的数据会生成缓存,查询的时候会先查询缓存,这样可以节约资源,提高效率,但是也由此产生一些问题,所以此时需要先清除缓存,在做查询操作。
    可以通过以下代码清除缓存 后再做查询操作
//清除所有数据库缓存
daoSession.clear()
//MyAplication.getApplication().getDaoSession().clear();


//清空指定某个数据表缓存
//MyAplication.getApplication().getDaoSession().getUserInfoDao().detachAll();

相关文章

  • GreenDao3.2.2集成和基本使用

    GreenDao3.2.2集成和基本使用 官方git网址:greenrobot/greenDAO 优点:一个精简的...

  • springboot集成mq问题总结

    springboot集成mq 基本使用 pom 和 yml 配置 消费者逻辑 成熟集成使用 配置 消费者 生产者

  • android GreenDao

    Android框架之路——GreenDao3.2.2的使用 - CSDN博客 GreenDAO 完美解决数据库升级...

  • greendao打包混淆

    版本greendao3.2.2

  • GreenDao3.2.2使用

    一.前言 官方文档是这样解释的:greenDAO是一款开放源代码的Android ORM,使SQLite数据库的开...

  • 2016-11-2

    BufferKnife的集成和基本使用 1.使用:在build.gradle里加入 加入之后发现报错,错误大致如下...

  • iOS百度人脸识别SDK集成

    集成百度人脸识别和其他SDK基本类似,需要注意的是手动集成还是自动集成,我是采用的是自动集成的方案。 1.使用百度...

  • mybatis 思维导图,让 mybatis 不再难懂(二)

    上一篇文章写了mybatis的基本原理和配置文件的基本使用,这一篇写mybatis的使用,主要包括与sping集成...

  • GreenDao3.2.2简单使用

    一:将GreenDao引入项目中 需要在两个地方添加配置:1:在Project–>budld.gradle中配置如...

  • GreenDao3.2.2使用详解

    由于项目优化,将项目使用的数据库GreenDao从2.0升级到3.0,两者在配置及使用上均有很大的不同,关于Gre...

网友评论

      本文标题:GreenDao3.2.2集成和基本使用

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