Android学习之GreenDao最全面的使用详解(搭建+入门使用+基本语法)

tech2023-12-01  33

简单介绍

greenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化, 最小的内存开销 、依赖体积小。greenDAO数据库是非常适合存储大量数据,从而加速事项。使用greenDAO,大多数实体可以插入,更新和在速率加载每秒几千实体。

一、 GreenDao搭建

在这里建议大家使用最新版的greenDAO,不然会出现各种各样的问题

导入依赖

1.Project: build.gradle

buildscript { repositories { google() jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:3.4.2' classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // 添加插件 更好支持GreenDao } }

2.Module:app build.gradle 最上面引入对应的插件

apply plugin: 'org.greenrobot.greendao' // 添加应用依赖插件

导入依赖,这里使用的是3.3.0,建议使用3.3.0或是3.2.2版本的

implementation 'org.greenrobot:greendao:3.3.0' // 添加库

配置greenDao的参数

greendao { schemaVersion 1 targetGenDir 'src/main/java' daoPackage "${android.defaultConfig.applicationId}.greenDao" }

然后重新sync一下项目即可

二、简单入门

1.实体类:

package com.st.myriven.greenDao; import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Generated; @Entity public class User { @Id private long id; private String name; private int age; //省略了getter,setter 方法 }

创建完实体类后,重新build下项目(如果出现问题,先clean在进行build),这时候你会发现会在之前指定的目录下多出几个类,我们接下来就是通过这几个类进行操作数据库 2.创建一个类去继承Application,需要在AndroidManifest.xml文件中置顶application的名字 代码:

public class AppContext extends Application { private DaoSession daoSession; @Override public void onCreate() { super.onCreate(); initDreenDao(); } /** * greendao数据库初始化 */ private void initDreenDao() { DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "demo.db"); SQLiteDatabase db = devOpenHelper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } /** * 获取 DaoSession */ public DaoSession getDaoSession() { return daoSession; } }

3.使用

public class TestActivity extends Activity { AppContext myApp; DaoSession daoSession; UserDao userDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); myApp= (AppContext) getApplication(); daoSession = myApp.getDaoSession(); userDao = daoSession.getUserDao(); User user = new User(); user.setId(1); user.setName("张三"); user.setAge(22); //userDao.insert(user);//如果id重复,会报错, userDao.insertOrReplace(user); List list = selectAll(); Log.i("info",list.get(0).toString()); } public List selectAll(){ return userDao.loadAll();// 查询所有记录 } }

打印到日志中

三、常见注解

@Id: 对应数据表中的 Id 字段 @Entity: 使用@Index作为一个属性来创建一个索引,默认是使用字段名 @Index: 使用@Index作为一个属性来创建一个索引,默认是使用字段名 @NotNull: 设置数据库表当前列不能为空 @Unique: 表名该属性在数据库中只能有唯一值 @Property: 设置一个非默认关系映射所对应的列名,默认是使用字段名 @OrderBy: 更加某一字段排序

当然还有很多注解,在这里不一一介绍,这些相对比较常见

四、基本语法

在这里所有的语句均使用上面的userDao进行操作

(一)插入

插入语句可直接引用上面的

User user = new User(); user.setUserId(1); user.setName("小明"); user.setAge(16); userDao.insert(user); userDao.insertOrReplace(user);

insertOrReplace和insert区别 insert时,当id相同时,会报错 insertOrReplace,当id相同时,不会报错,只是会替换一下

(二)删除

userDao.delete(user);//根据对象删除 userDao.deleteByKey(user.getId());//根据id删除 userDao.deleteAll();//删除全部

(三)修改

userDao.update(user);

(四)查询

// 查询所有记录 userDao.loadAll(); //根据ID查询 userDao.loadByRowId(user.getId()); //查询成年的用户 userDao.queryRaw("where AGE>?","18"); //模糊查询 para是你的参数 userDao.queryBuilder().whereOr(userDao.Properties.Name.like("%"+para+"%"),BedInfoDao.Properties.Num.like("%"+para+"%")).list() //根据条件查询 userDao.queryBuilder().where(userDao.Properties.Id.eq(user.getId())).limit(1).list();

当然还有很多查询的方式,不在一一例举,以下是会用到的语法介绍:

whereOr: where语句里面写的条件都是用“且”连接,whereOr里的语句使用“或”连接 distinct : 直接过滤掉重负字段 limit: 分页n个一页,一般和offset结合使用 offset: 忽略查询出的前n条结果 orderAsc: 以字段升序排序 orderDesc: 以字段降序 preferLocalizedStringOrder : 本地化字符串排序 orderCustom: 自定义排序 里面需要传两个参数: 一个属性 和对应的排序方案 ASC 或是 DESC orderRaw: 也是自定义排序, 把字段和 排序方案 写在一个字符串传入 stringOrderCollation: 也是自定义排序 可以合并多个升降排序方案 以日期升序 且 价格降序

最新回复(0)