GreenDAO的本质是为存储在关系数据库SQLite中的数据提供一个面向对象的接口。只需定义数据模型,Green DAO将创建Java数据对象(实体)和DAO(数据访问对象)这将为您节省大量无聊的代码,只需来回移动数据。除此之外,Green DAO还提供一些高级ORM(对象关系映射)特性类似于会话缓存、急切加载和活动实体。

ORM:为了解决面向对象与关系数据库存在的互不匹配的现象的技术,举个例子,就是为了解决原jdbc操作数据库的方式(结构复杂,访问渠道乱),orm提供了单独访问数据的渠道

总的来说,greendao封装了原生的数据库,使用非常简单.不耗用内存

配置:

在项目工程的biuld.gradel中配置需要用的插件

dependencies {
       ......
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
    }

在module项目中配置
1.

implementation 'org.greenrobot:greendao:3.2.2'  //导入依赖



apply plugin: 'org.greenrobot.greendao'   //配置插件需要的依赖,注意放的位置(全局)

android {  
  .......



    defaultConfig {

3.自定义greendao的生成(marster,session,dao)路径,可以不自定义路径使用

com.greendaoDemo_20190218:项目包路径
gen为生成的包名(marster,session,dao生成在gen下)

greendao {
    schemaVersion 1
    daoPackage 'com.greendaoDemo_20190218.gen'
    targetGenDir 'src/main/java'  
}

创建bean类(数据库表,CRUD(增删改查)操作,都是通过这个bean类来更改数据)

@Entity:只有被@Entity的实体类才能被dao类操作
@Id:表示该字段是id,该字段类型必须为Long类型,(autoincrement = true)表示主键会自增
@Property:普通字段比如下方的str字段,他不需要声明,默认

需要表中有几个字段,就定义几个变量,id是必须定义的

@Entity
public class NewsTable {

    @Id
    public Long id;
    public String str;
   
}

上方的定义字段完成后,build一下(重新刷新)

greendao db保存路径 greendao缓存设置_字段

刷新后我们会发现:

greendao将构造方法,getset方法生成

@Entity
public class NewsTable {

    @Id
    public Long id;
    public String str;
    @Generated(hash = 738712425)
    public NewsTable(Long id, String str) {
        this.id = id;
        this.str = str;
    }
    @Generated(hash = 1081144428)
    public NewsTable() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getStr() {
        return this.str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    
}

同时,在项目文件中会生成gen包(自定义生成路径)

greendao db保存路径 greendao缓存设置_greendao db保存路径_02

在程序入口处,自定义application中初始化

getSession:提供了session对象,在自定义application中得到了session对象,方法的目的是:向外部提供该对象,想要进行crud(增删改查)操作,需要通过dao对象调用,但是dao对象通过session对象获得

其实marster,session,dao这三个就是上下级关系(封装关系)
marster-----session------dao

public class MyApplication extends Application {

    private static DaoSession daoSession;

    @Override
    public void onCreate() {
        super.onCreate();

        //1-1.创建数据库辅助方法,来创建数据库
        DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(this, "news", null);
        //1-2.通过数据库辅助对象来获取数据库可操作对象
        SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
        //1.创建Master实例,需要数据库可操作对象
        DaoMaster daoMaster = new DaoMaster(writableDatabase);
        //2.通过master对象创建session对象(session对象才可以调用dao)
        daoSession = daoMaster.newSession();


    }
    //创建公共静态方法,向外部提供session对象
    public static DaoSession getSession(){

        return daoSession;
    }
}

在清单文件中,使用自定义的application

<application
        android:name=".ui.app.MyApplication"
       . . . .
    </application>

使用:

添加:

//获取session对象,调用自定义application中的静态方法
                DaoSession session = MyApplication.getSession();
                //获取dao对象,开始增删改查
                NewsTableDao newsTableDao = session.getNewsTableDao();
                //创建表(bean)对象
                NewsTable newsTable = new NewsTable();
                //给表中字段赋值
                newsTable.setStr("张三");
                //添加到数据库
                newsTableDao.insert(newsTable);

查询:load根据id查询 loadAll全查

NewsTable load = newsTableDao.load((long) 1);
                if (null != load) {
                    Toast.makeText(this,load.getStr(),+0).show();
                } else {
                    Toast.makeText(this,"数据不存在",+0).show();
                }

剩下内容明天完善!!!