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

简单介绍

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: 也是自定义排序 可以合并多个升降排序方案 以日期升序 且 价格降序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值