GreenDao踩坑记

来源:互联网 发布:java招聘信息从哪找 编辑:程序博客网 时间:2024/06/03 09:24

GreenDao踩坑记

前言

以前都是自己写SQLite的dao,然后自己写sql语句,自己管理.最近发现一款开源库比较火,已经被开发者广泛使用.入门简单,不用再写sql语句,增删改查都只需一句话即可搞定.

当然流行也是有原因的,在第三方主流库中它的操作(插入,更新,读取)是最快的.

优点主要是下面几点:

  • 存取速度快
  • 支持数据库加密
  • 轻量级
  • 激活实体
  • 支持缓存
  • 代码自动生成

1. 引入GreenDao

首先在应用程序最外层的build.gradle中加入如下代码:

    // In your root build.gradle file:    buildscript {        repositories {            jcenter()            mavenCentral() // add repository        }        dependencies {            classpath 'com.android.tools.build:gradle:2.3.3'            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin        }    }

其次是在app主工程的build.gradle里面加入如下代码:

// In your app projects build.gradle file:apply plugin: 'com.android.application'apply plugin: 'org.greenrobot.greendao' // apply plugindependencies {    compile 'org.greenrobot:greendao:3.2.2' // add library}

2.创建Bean对象

@Entitypublic class CacheBean {    /**     * 对象的Id,必须使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值     */    @Id(autoincrement = true)    private Long id;    @Unique    private String key;    private String json;}

其中注解的意思:
- @Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
- @Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
- @Property:可以自定义字段名,注意外键不能使用该属性
- @NotNull:属性不能为空
- @Transient:使用该注释的属性不会被存入数据库的字段中
- @Unique:该属性值必须在数据库中是唯一值
- @Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改

注意:写好了bean对象之后必须进行如下操作:Android Studio菜单栏->Build->make project,然后greenDao会自动生成代码

自动生成的代码如下:

其中这些类对应的意思:
- DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
- DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
- DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API

3.初始化(创建)数据库

直接在应用程序的Application中进行初始化GreenDao,获取可以操作数据库的dao

public class NewsApplication extends Application {    /**     * 获取Dao对象管理者  Dao对象中存在着增删改查等API     */    private static DaoSession daoSession;    @Override    public void onCreate() {        super.onCreate();        initDatabase();    }    private void initDatabase() {        //创建数据库news.db        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "news.db", null);        //获取可写数据库        Database db = helper.getWritableDb();        //获取Dao对象管理者        daoSession = new DaoMaster(db).newSession();    }    /**     * 获取Dao对象管理者     * @return DaoSession     */    public static DaoSession getDaoSession() {        return daoSession;    }}

4.数据库的增删改查,实现自己的业务逻辑

public class CacheDao {    /**     * 插入cache  如果已经存在则替换     *     * @param cacheBean CacheBean数据     */    public static void insertCache(CacheBean cacheBean) {        NewsApplication.getDaoSession().insertOrReplace(cacheBean);    }    /**     * 删除缓存     *     * @param cacheBean CacheBean     */    public static void deleteCache(CacheBean cacheBean) {        NewsApplication.getDaoSession().delete(cacheBean);    }    /**     * 更新缓存     *     * @param cacheBean CacheBean     */    public static void updateCache(CacheBean cacheBean) {        NewsApplication.getDaoSession().update(cacheBean);    }    /**     * 查询指定key的缓存     *     * @param key 缓存的key  唯一标识     * @return 返回查询到的key的缓存集合  一般来说,这里是返回1个,当然,可能数据库里面没有该key对应的缓存     */    public static List<CacheBean> queryCacheByKey(String key) {        //CacheEntityDao是自动生成的里面是一些数据库操作        //然后这里的Properties.Key也是自动生成的,意思是表里面的一个字段        return NewsApplication.getDaoSession().queryBuilder(CacheBean.class).where(CacheEntityDao                .Properties.Key.eq(key)).list();    }    /**     * 查询全部缓存数据     *     * @return 缓存集合     */    public static List<CacheBean> queryAllCache() {        return NewsApplication.getDaoSession().loadAll(CacheBean.class);    }}

结语

关于GreenDao的基本操作就到这里,它的高级操作请到官网学习.

原创粉丝点击