开源框架greenDao的使用(二)-greenDao3

一、概述

在项目开发中,我们或多或少需要接触到SQLite,但是在使用时,还是稍显复杂,并且需要进行测试、解析查询结果等等。于是,适用于Android的ORM(Object Relation Mapping)框架出现了,比较流行的有greenDao、Realm、OrmLite、SugarORM、ActivteAndroid等。在此次项目开发中,我们将使用其中的greenDao。

greenDao是一个使用Code generation方式的框架,它的性能忧于同类的其它框架。greenDao在版本更新上有greenDao2.x系列和greenDao3.0系列,最新的greenDao已经发展到v3.1.1,本次项目开发中,我们将引入greenDao3.1.1下面将讲述greenDao3.x的使用步骤。
Giuthub:https://github.com/greenrobot/greenDAO

二、使用步骤

1.引用该框架

compile 'org.greenrobot:greendao:3.1.1'
compile 'org.greenrobot:greendao-generator:3.1.0'

2.build.gradle配置中配置greenDao服务插件,这一步非常关键。

apply plugin: 'org.greenrobot.greendao'
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
  }
}

配置好greenDao服务插件后,当我们sync project的时候,会自动从maven仓库下载该插件。该插件是用来生成与数据库操作相关的代码的,非常重要。

3.在build.gradle中配置greenDao属性

至此,build.gradle文件的配置就完成了。

greendao {
    schemaVersion 1
    daoPackage 'com.huatec.edu.greendao3_demo.gen'
    targetGenDir 'src/main/java'
}
dependencies {
...
}

schemaVersion:数据库schema版本,或数据库版本号。
daoPackage:通过greenDao服务插件生成的数据库代码文件所在的包名,默认为实体类所在的包名。
targetGenDir:数据库代码文件所在的目录,默认是“build/gererated/source/greenDao”,这里我们将其自定义到我们的java目录中“src/main/java”方便查看和编辑,不配置的话将会保存在默认目录下。
除了这些属性之外,还有一些属性如下:
targetGenDirTest:设置生成单元测试目录。
generateTests:设置自动生成单元测试用例。

4.创建实体类,并生成与数据库操作相关的代码。

因为本次项目需要缓存商品列表数据和收藏ed商品,下面以商品列表类Category为例说明如何生成与数据库操作相关的代码。新建Category类如下:

@Entity
public class Category implements Serializable {
/**
     * 这里使用greenDao注解的方式来生成相关的方法。
* @Id 可以将该属性设计为Category表的主键并自增长,注意类型为Long。
* @Transient 可以设置保留属性,该属性将不会为表字段。
*/
@Id
private Long cat_id;  //商品分类id,可以设计为表的主键并自增长
private String name; //分类名称,如酒、红酒、长城红酒都属于分类名称。
private int parent_id; //父级id
private String cat_path; //商品所属级别信息,比如长城红酒属于酒-->红酒这个级别
private int goods_count; //商品数量
private int sort; //排序信息
private int type_id; //所属类别,比如红酒分类属于酒这个列别
private int list_show; //是否显示该商品
private String image; //商品图片
}

我们在该类的名称上使用@Entity进行注解,当我们点击Build–>Make Project功能时,greenDao的服务插件将会扫描整个项目下的所有@Entity注解类,并自动在我们配置的目录和包名下生成代码。这里将会在com.huatec.edu.greendao3_demo.gen目录下生成与数据库操作相关的类CategoryDao、DaoMaster和DaoSession,并自动完成Category类属性的set/get方法、无参构造器和全参构造器的创建。代码生成完毕后的项目包结构如图3-11所示。由图我们可以看出,自动生成的代码和我们在build.gradle中对greenDao配置的信息是相符合的。其中Category类的名称就是数据表的名称,在该类中定义的非保留属性名称就是该表的字段名称。CategoryDao负责Category表的操作逻辑,而且greenDao会负责创建该表,无须我们手动通过代码来创建。
一般在使用时,我们可以一次性将需要的@Entity类都创建完成,当然我们也可以在原有的数据库版本上通过新增@Entity类来新增数据表。不过在Make Project之前,请做好数据库的备份和迁移工作。

5.greenDao的全局配置。

新建GreenDaoManager类,进行greenDao的基本配置,代码如下:

public class GreenDaoManager {
    private static GreenDaoManager mInstance; //单例
    private DaoMaster mDaoMaster; //以一定的模式管理Dao类的数据库对象
    private DaoSession mDaoSession; //管理制定模式下的所有可用Dao对象
    public GreenDaoManager() {
        if (mInstance == null) {
            DaoMaster.DevOpenHelper devOpenHelper = new 
                   DaoMaster.DevOpenHelper(MyApplication.getContext(), "mydb", null);
            mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
            mDaoSession = mDaoMaster.newSession();
        }
    }
    public static GreenDaoManager getInstance() {
        if (mInstance == null) {
            synchronized (GreenDaoManager.class) {
                if (mInstance == null) {
                    mInstance = new GreenDaoManager();
                }
            }
        }
        return mInstance;
    }
    public DaoMaster getMaster() {
        return mDaoMaster;
    }
    public DaoSession getSession() {
        return mDaoSession;
    }
    public DaoSession getNewSession() {
        mDaoSession = mDaoMaster.newSession();
        return mDaoSession;
    }
}

在上面的代码中,我们为GreenDaoManager类创建了线程安全式的单例模式,并在构造器中,对DaoMaster和DaoSession实例进行了初始化。其中的DaoMaster.DevOpenHelper是一个比较重要的类,我们通过它来获取数据库对象。新建一个该类的对象我们需要传入三个参数,第一个参数为上下文对象,第二个对象为数据库名称,如上述代码中,我们的数据库名称为“mydb”,第三个对象为CursorFactory游标工厂,默认情况下可以为空。
GreenDaoManager类用于对greenDao进行基本配置。但是在整个app中,我们只希望有且只有一份这样的配置,所以我们需要将该配置全局化,我们只需要在MyApplication中应用该配置即可,代码如下。

public class MyApplication extends Application {
    private static Context mContext;
    @Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
        //greenDao全局配置
        GreenDaoManager.getInstance();
    }
    public static Context getContext() {
        return mContext;
    }
}

至此,我们已经完成了greenDao的引入了,并创建了数据库“mydb”和数据表“Category”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值