首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GreenDao 3.0解析

GreenDao 3.0解析

作者头像
老马的编程之旅
发布于 2022-06-22 01:53:21
发布于 2022-06-22 01:53:21
68300
代码可运行
举报
文章被收录于专栏:深入理解Android深入理解Android
运行总次数:0
代码可运行
  1. GreenDao 3.0简介: 在Android开发中,数据缓存的开发可能会使用到SQLite,然而在使用它的时候,我们往往要进行许多额外的工作,编写原生的SQL语句与解析查询结果等。所以适应Android的ORM框架就产生了。 目前较为流行的Android的ORM框架就是GreenDao, ORM就是关系映射(Object Relation Mapping),即对象关系映射。它的实现思想就是将关系数据库中表的数据映射为对象,以对象的形式展现,这样开发人员就可以把数据库的操作转化为对这些对象的操作。因此它的目的就是为了方便开发人员用面向对象的思想来实现数据库的操作。

大家应该对ORM框架有了初步的了解,下面我们就来使用GreenDao,我们就通过GreenDao的官网,http://greenrobot.org/greendao/ ,来学习如何对它进行使用。

从图中我们可以知道GreenDao已经升级到了3.0版本,相比之前的旧版本,3.0版本采用注解的方式通过编译方式生成Java数据对象和DAO对象。相比之前需要通过新建GreenDaoGenerator工程生成Java数据对象(实体)和DAO对象,大大减少了使用的成本。

  1. GreenDao 3.0使用 我们跟着官网的步骤来对学习如何使用GreenDao 3.0 1) 导入相关的包

根据上面的内容,我们需要在在gradle的dependencies中导入如下内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'

2) 配置gradle

官网上说,GreenDao 3.0通过一个新的插件来生成代码,这个插件会去浏览所有的被Entity注释的类去收集表信息,并生成3个类,DaoSession,DaoMaster,和所有的Dao类。使用这个插件的话,需要在gradle中配置如下的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apply plugin: 'org.greenrobot.greendao'

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

同时一般我们还会添加如下的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
greendao {
    schemaVersion 1
    daoPackage 'com.example.jikeyoujikeyou.greendao2'
    targetGenDir 'src/main/java'
}

需要说明一下含义: schemaVersion:指定数据库schema版本号,迁移等操作会用到 daoPackage:通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名 targetGenDir:这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的java目录中,而不是build中,这样就不用额外的设置资源目录了 3) 新建实体类 以下为基础属性注解

@Id :主键 long/Long型,可以通过@Id(autoincrement = true)设置自增长 @Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=”name”) @NotNul:设置数据库表当前列不能为空 @Transient :添加次标记之后不会生成数据库表的列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
public class User {

    @Id(autoincrement = true)
    private Long id;
    private String name;
    @Transient
    private int tempUsageCount; // not persisted
   }

我们在新建实体类的时候,id是我们数据库表的主键,上面代码中我给id使用自增长的注解,如果这里不设置的话,我们就需要在创建User对象的时候给id赋值,如果不这样做,就会报出空指针的异常。

上面为索引注解 @Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束 @Unique:向数据库列添加了一个唯一的约束

关系注解 @ToOne:定义与另一个实体(一个实体对象)的关系 @ToMany:定义与多个实体对象的关系 接下来让我们点击as中Build菜单栏中的Make Project,make完成之后会发现我们的User类中突然多了好多代码,这就是GreenDAO自动为你生成的了,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
public class User {
    @Id(autoincrement = true)
    private Long id;

    private String name;
    private int age;

    public int getAge() {
        return this.age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Generated(hash = 1309193360)
    public User(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Generated(hash = 586692638)
    public User() {
    }

}

Make Project后生成了如下的类:

4) 使用GreenDAO进行增删改查 这里我都封装在了一个类DBManager之中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class DBManager {
    private static final String dbName = "DBdemo";

    private static DBManager mInstance;

    private final Context context;

    private DaoMaster.DevOpenHelper openHelper;

    private DBManager(Context context) {
        this.context = context;
        openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);

    }

    //单例模式
    public static DBManager getInstance(Context context) {
        if (mInstance == null) {
            synchronized (DBManager.class) {
                if (mInstance == null) {
                    mInstance = new DBManager(context);
                }
            }
        }
        return mInstance;
    }

    //可读数据库
    private SQLiteDatabase getReadableDatabase() {
        if (openHelper == null) {
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);

        }
        SQLiteDatabase db = openHelper.getReadableDatabase();
        return db;
    }

    //可写数据库
    private SQLiteDatabase getWritableDatabase() {
        if (openHelper == null) {
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);

        }
        SQLiteDatabase db = openHelper.getWritableDatabase();
        return db;
    }

    //插入数据
    public void insertUser(User user) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        userDao.insert(user);
    }

    //插入数据集合
    public void insertUserList(List<User> users) {
        if (users == null || users.isEmpty()) {
            return;
        }
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        userDao.insertInTx(users);
    }

    //删除数据
    public void deleteUser(User user) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        userDao.delete(user);
    }

    //更新数据
    public void updateUser(User user) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        userDao.update(user);
    }
    /*
    *
    * 查询用户列表
    */

    public List<User> queryUserList() {
        DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        UserDao userDao = daoSession.getUserDao();
        QueryBuilder<User> qb = userDao.queryBuilder();
        List<User> list = qb.list();
        return list;
    }


}

对上述代码说明一下: (1) 一个DaoMaster就代表着一个数据库的连接;DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的。 (2) 通过userDao的queryBuilder()方法,生成一个查找构造器,可以给构造器添加where条件判断、按照某某字段排序以及查询的条数等基本的数据库操作。list()方法表示查询的结果为一个集合。 5) 进行试验 接下来,我在MainAcitivty写入如下代码,进行试验

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        testDBManager();
    }

    private void testDBManager() {

        DBManager dbManager = DBManager.getInstance(this);
        for (int i = 0; i < 10; i++) {
            User user = new User();

            user.setAge(i * 3);
            user.setName("我是第" + i + "选手");
            dbManager.insertUser(user);
        }

        List<User> userList = dbManager.queryUserList();

        for (User user : userList) {
            Log.e("MainActivity", "queryUserList--before-->" + user.getId() + "--" + user.getName() + "--" + user.getAge());

            if (user.getId() == 5) {
                user.setAge(17);
                dbManager.updateUser(user);
            }

            if (user.getId() == 7) {
                dbManager.deleteUser(user);
            }
        }
        userList = dbManager.queryUserList();
        for (User user : userList) {
            Log.e("MainActivity", "queryUserList--after--->" + user.getId() + "---" + user.getName() + "--" + user.getAge());

        }
    }
}

运行程序,输出如下内容,说明使用GreenDAO成功!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
GreenDAO快速入门
之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的差异。只停留在会使用的阶段。说起来也是惭愧。本文的重点也是在于如何快速使用。不会进行较深的探究。
g小志
2018/09/11
9690
GreenDAO快速入门
Android十八章:是时候在你项目用上greenDAO3GreenDao
GreenDao3.1.0使用案例包含(增删查改,升级数据库),3.+版本比2.+更加便捷生成DaoMaster和DaoSession 本文项目地址
ppjun
2018/09/05
6160
Android项目实战(五十一):浅谈GreenDao
HX_User类会变成下面情况,注意 属性值的get和set方法不要自己写,是make project之后自动生成的
听着music睡
2018/09/20
5000
Android项目实战(五十一):浅谈GreenDao
GreenDao 工具类 --- 使用 Json 快速生成 Bean、表及其结构,"炒鸡"快!
作者:林冠宏 / 指尖下的幽灵 腾讯云+社区:https://cloud.tencent.com/developer/user/1148436/activities 掘金:https://jue
林冠宏-指尖下的幽灵
2018/01/03
1.8K0
GreenDao 工具类 --- 使用 Json 快速生成 Bean、表及其结构,"炒鸡"快!
Android GreenDao的基本使用
Android 本地数据库有很多,Sqlite、Dbutils、LitePa、GreenDao等,其他的几个数据库框架都用过了,GreenDao还未在项目中用过,所以在这里记录下GreenDao的基本使用。
黄林晴
2019/01/10
2.4K0
android数据保存之greendao
有时我们的数据属于保存到数据库,对于Android应用和IOS应用,我们一般都会使用SQLite这个嵌入式的数据库作为我们保存数据的工具。由于我们直接操作数据库比较麻烦,而且管理起来也非常的麻烦,以前
xiangzhihong
2018/02/02
1.8K0
android数据保存之greendao
GreenDao,clearIdentityScope报错Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Com
Error:(41, 22) 错误: 找不到符号 符号:   方法 clearIdentityScope() 位置: 类型为DaoConfig的变量 dataDaoConfig
zhangjiqun
2024/12/16
1350
GreenDao,clearIdentityScope报错Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Com
Android greenDAO 3.2.2简单使用
然后编译会在自定义的文件夹包名(比如上面的‘com.yechaoa.test.dao’)下生成3个文件:
yechaoa
2022/06/10
6660
Android集成GreenDao数据库
数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。 目前,Android系统中提供了3种方式的数据持久化技术,即文件存储、SharedPreferences存储以及数据库存储。当然,除了这3种方式之外,你还可以将数据保存在手机的SD卡中,不过使用文件、Shared Preferences或数据库来保存数据会相对更简单一些,而且比起将数据保存在SD卡中会更加地安全。Shared Preferences通常用在轻量级的数据存储场景中,比如账号/密码的存储,而数据库则用在数据量比较大的场景中,比如聊天数据的存储。
xiangzhihong
2022/10/28
6500
拆轮子系列之理解GreenDao框架源码
如果Android项目中要使用GreenDAO框架,需要先创建一个Java项目用于生成实体类和DAO类,然后在Android项目中使用这些类,在此过程中分别需要对Android项目添加GreenDAO的核心包依赖和对Java项目添加generator包依赖,所以解析GreenDAO的源码需要解析两部分,而这里只解析GreenDAO核心包在Android项目中的工作原理,generator包中的原理很简单,总的来说有四个作用:就是用于生成实体类、DAO类、建立多表之间的关联以及配置实体类的接口和序列化功能
见得乐
2022/09/08
1.2K0
GreenDao查询,Querying
查询接口返回符合指定条件的实体对象集合.你可以使用SQL组织你的查询语句,或者采用更好的方法,使用greenDao的QueryBuilder API.greenDao的查询也支持延迟加载结果,当结果集很大的时候,它会节省内存和提高性能.
zhangjiqun
2024/12/16
1590
Android ORM 框架之 greenDAO
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕育而生了,现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。而今天的主角便是 greenDAO,下面,我将详解地介绍如何在 Android Studio 上使用 greenDAO,并结合代码总结一些使用过程中的心得。 关于 gre
xiangzhihong
2018/02/01
1.3K0
Android ORM 框架之 greenDAO
开源数据库框架greenDAO
最近在对开发项目的性能进行优化。由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写、查询等操作。因此首先想到了对整个项目的数据库框架进行优化。 原先使用android本身内置的sqllite,也就是用的最基本的SQLiteOpenHelper方法,这种方法对自己来说比较方便易懂。但是在使用过程中感觉很繁琐,从建表到对表的增删改查等操作,如果表对象的属性很多,就需要使用大量的代码来执行建表、插入等。在代码执行中还需要对数据库和游标的进行及时关闭(开启使用,用完关闭),而且还需要部分sq
xiangzhihong
2018/01/29
2.4K0
GreenDao教程1
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个框架还是不错的。直接面向对象的,可以通过对对象的操作,实现数据的存储。
用户3030674
2018/09/14
8680
GreenDao教程1
RxCache 整合 Android 的持久层框架 greenDAO、Room一. 背景二. 持久层三. 使用四. 总结
RxCache 是一个支持 Java 和 Android 的 Local Cache 。
fengzhizi715
2018/10/25
1.1K0
RxCache 整合 Android 的持久层框架 greenDAO、Room一. 背景二. 持久层三. 使用四. 总结
优雅地烘焙 DBService
记得大二那年第一次接触 GreenDao 这个神奇的数据库,惊叹道,哇,原来代码还能这么写啊,不用自己手撸 SQLiteDatabase,不用写那些麻烦的 SQL 语句,编程还真是一件 “轻松” 的事情呢2333。然而,时隔多年,当我再次看到自己曾经留在项目里的那段代码时,相顾无言,惟有泪千行…
HelloVass
2018/09/12
7350
优雅地烘焙 DBService
★ Android基础篇 Android 数据存储与性能
最近到了一家公司,跟一个同事做项目,比如常规的一些操作用SharedPreferences就很好搞定,他跟我说SharedPreferences 会影响性能说了一堆… 难道别的存储方式就不耗费性能吗?不消耗内存吗?
全栈程序员站长
2021/04/07
1.3K0
Android数据层架构的实现 下篇
接上篇:Android数据层架构的实现 上篇 4.外观模式实现数据处理引擎框架暴露出来的api 我们在使用各种开源框架的时候,大多数时候都不会对框架内部的实现进行细究,所以一个好的框架需要一个简单的入口来对整个框架进行使用,我接下来就是要讲解本框架的入口类。 public class DataEngine { public static String TAG="DataEngine"; public static Context nowContext; public static Observa
何时夕
2018/05/02
1.1K0
1.0-springboot的java配置方式
本文介绍了1.0-springboot的java配置方式,包括创建User实体类、UserDao用于模拟数据库交互、UserService用于实现User数据操作业务逻辑和SpringConfig用于实例化Spring容器。通过测试方法,完美地实现了用Java配置替代了XML配置文件,同时使用AnnotationConfigApplicationContext来实例化Spring容器,并调用UserService中的方法查询用户列表,最后输出用户信息。
用户1134788
2018/01/05
5630
1.0-springboot的java配置方式
GreenDao 兼容升级,保留旧数据的---全方面解决方案
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/ 腾讯云专栏: https://cloud.tencent.com/developer/user/1148436/activities GreenDaoCompatibleUpdateHelper
林冠宏-指尖下的幽灵
2018/02/11
1.5K0
相关推荐
GreenDAO快速入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档