Android MVPBuilder第三篇[GreenDao]

来源:互联网 发布:ubuntu 丢失windows 编辑:程序博客网 时间:2024/06/17 00:51

- [ MVPBuilder Github 下载地址]

今天我们引入数据库开源框架GreenDao,它是非常优秀的ORM框架。先来看看今天要关注的工程目录结构:
这里写图片描述

就是箭头所指的那几个文件。其中只有绿色的是我们要写的,其它都是自动生成的!!要知道程序员是世界上最懒而生物,还是那句,不要自己造轮子,还是那句,抽象抽象抽象。所有项目的数据库操作都最后变为增,删,改,查。所以才会有Dao这个概念的提出,再把操作数据库抽象封装起来,让程序员不用懂sql语句。当然,作为基本的素养,sql语句是必须要了解的。

- [ GreenDao 官网]

情景假设

我们的APP要创建一个User表,这个表有OID,Name,Sex这几个字段,然后需要对这个表进行增删改查。简单三步,OK!

  1. 编写生成器DaoGenerator
  2. 执行生成器生成文件
  3. 编写Api接口
  4. 使用增删改查功能

第一步:

创建一个Java Module,然后新建一个可执行的DaoGenerator类,注释已经非常清楚了,这个生成器是用来生成程序中使用的实体bean或者叫POJO或者叫Entity,反正就是一个类,这个类是对你业务里某些东西的封装,这里就是用户类和用户表的映射。

package com.yihukurama.daogener;import de.greenrobot.daogenerator.Entity;import de.greenrobot.daogenerator.Schema;public class DaoGenerator {        public static void main(String[] args) throws Exception {            // 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。            // 两个参数分别代表:数据库版本号与自动生成代码的包路径。            // Schema schema = new Schema(1, "me.itangqi.greendao");            // 当然,如果你愿意,你也可以分别指定生成的 Bean 与 DAO 类所在的目录,只要如下所示:            Schema schema = new Schema(1, "com.yihukurama.www.mvpbuilder.framework.m.dao.bean");            schema.setDefaultJavaPackageDao("com.yihukurama.www.mvpbuilder.opensource.greendao");            // 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。            // schema2.enableActiveEntitiesByDefault();            // schema2.enableKeepSectionsByDefault();            // 一旦你拥有了一个 Schema 对象后,你便可以使用它添加实体(Entities)了。            UserTable(schema);            // 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。            // 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。            new de.greenrobot.daogenerator.DaoGenerator().generateAll(schema, "/workspace/androidstudio/MVPBuilder/app/src/main/java/");        }    private static void UserTable(Schema schema) {        // 一个实体(类)就关联到数据库中的一张表,此处表名为「User」(既类名)        Entity User = schema.addEntity("User");        // 你也可以重新给表命名        // note.setTableName("User");        // greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值        // 接下来你便可以设置表中的字段:        User.addIdProperty();        User.addStringProperty("Oid").notNull();        User.addStringProperty("Name");        User.addStringProperty("Sex");    }}

第二步:

执行这个生成器,然后在对应的目录下就会生成代码。对应地生成箭头所指的代码。想一下未来要增加一个好友信息表怎样?那就是再加一个FriendsTable的函数,然后把字段加进去,再执行。总之箭头所指的两个地方的代码都是自动生成的,尽量不要改动。
这里写图片描述

第三步:

编写自己的接口。虽然greendao已经很好用了,完全可以在代码中使用它的方法,但是作为一个聪明的程序员,还是应该把非业务的代码做一次封装,所有业务情况需要用到greendao的都要通过这个接口调用。这里新建一个DaoApi接口。

/*    ShengDao Android Client, DBManager    Copyright (c) 2014 ShengDao Tech Company Limited */package com.yihukurama.www.mvpbuilder.opensource.api;import android.content.Context;import com.yihukurama.www.mvpbuilder.opensource.greendao.DaoMaster;import com.yihukurama.www.mvpbuilder.opensource.greendao.DaoSession;/** * [数据库管理类,数据采用GreenDao来实现,所有实现通过模板自动生成;通过获取daoSession来获取所有的dao,从而实现操作对象] *  * @author yihukurama * @version 1.0 * @date 2014-11-6 *  **/public class DaoApi {    private static String DB_NAME = "tempDB";    private static DaoApi instance;    private DaoMaster daoMaster;    private DaoSession daoSession;    public static DaoApi getInstance(Context context) {        if (instance == null) {            synchronized (DaoApi.class) {                if (instance == null) {                    instance = new DaoApi(context);                }            }        }        return instance;    }    /**     * 构造方法     * @param context     */    private DaoApi(Context context) {        if(daoSession == null){            if(daoMaster == null){                DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);                daoMaster = new DaoMaster(helper.getWritableDatabase());            }            daoSession = daoMaster.newSession();          }    }    public DaoMaster getDaoMaster() {        return daoMaster;    }    public void setDaoMaster(DaoMaster daoMaster) {        this.daoMaster = daoMaster;    }    public DaoSession getDaoSession() {        return daoSession;    }    public void setDaoSession(DaoSession daoSession) {        this.daoSession = daoSession;    }    public void reset(){        instance = null;        daoMaster = null;        daoSession = null;    }}

第四步:

大功告成,只剩调试[增删改查]。别急,先体会一下greendao带给我们什么,不用写sql语句,不用自己建表等等,让我们专注业务。这其实跟java的hibernate等是异曲同工之妙。第四步增删改查就留到下一节。记住,任何不是自己编写的代码,都要用一个中间的接口来调用,因为如果程序中有1000处调用,如果不用接口,到时候人家升级了,函数名变了,你想升级就要改1000处了,或者说你想换个框架,我不用greendao了,我突然想试试reddao看看性能怎样,也是改接口就行了,不用找1000处去改。下一篇我们继续来调试增删改查功能吧,这些其实官网都有~

0 0
原创粉丝点击