Android studio GreenDao 的理解和使用

723 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

GreenDAO理解

  • GreenDAO 概述

greenDAO 是适用于 Android 的轻量级快速 ORM 框架,可将对象映射到 SQLite 数据库中。 并且针对 Android 进行了高度的优化,greenDAO 提供了出色的性能,并占用了最少的内存,

  • 优点:
  1. 性能上(可能是 Android 上最快的 ORM 框架);
  2. 易用性上(提供强大并且简洁明了的 API);
  3. 轻量(最小的内存消耗与小于 150KB 的库大小)。
  • GreenDAO 使用

1、DaoMaster::DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。它有静态方法来创建表或删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,它们在SQLite数据库中创建模式。

2、DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取该对象。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。

3、XXXDao:数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久性方法,例如:count,loadAll和insertInTx。

4、Entities :可持久化对象。通常, 实体对象代表一个数据库行使用标准 Java 属性(如一个POJO 或 JavaBean )。

GreenDAO 使用

1、导入插件

classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' 

在这里插入图片描述 2、配置相关依赖

id 'org.greenrobot.greendao'

implementation 'org.greenrobot:greendao:3.2.2' 

在这里插入图片描述 在这里插入图片描述 3、创建实体类

@Entity
public class DemoModel implements Parcelable {
    @Id(autoincrement = true)
    private Long id;
    @Index(unique = true)
    private Integer usersId;
    private String name;
    private String age;
}
  • 一直 Alt + Enter 就行了

@Id 是主键 id Long 类型,可以通过 @Id(autoincrement = true) 设置自动增长(自动增长主键不能用基本类型 long,只能用包装类型 Long)。

@Index(unique = true) 是向数据库添加了唯一约束。

  • 实体类生成后,重新编译代码 在这里插入图片描述
  • 编译成功 在这里插入图片描述 4、初始化 GreenDAO
public class MyApplication extends Application {

    public static DaoSession mSession;

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

        initDb();
    }

    /**
     * 连接数据库并创建会话
     */
    public void initDb() {
        // 1、获取需要连接的数据库
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "test.db");
        SQLiteDatabase db = devOpenHelper.getWritableDatabase();
        // 2、创建数据库连接
        DaoMaster daoMaster = new DaoMaster(db);
        // 3、创建数据库会话
        mSession = daoMaster.newSession();
    }

    // 供外接使用
    public DaoSession getDaoSession() {
        return mSession;
    }
}
注意:别忘了在清单文件中注册

在这里插入图片描述

  • 调用
GreenDaoManager greenDaoManager=new GreenDaoManager(this);
DemoModel demoModel=new DemoModel();
      demoModel.setAge("5");
      demoModel.setName("huahua");
      //注册调用
      greenDaoManager.insert(demoModel);
  • GreenDaoManager管理数据库的操作
import android.content.Context;

public class GreenDaoManager {
    private Context mContext;
    private DemoModelDao mdemoModelDao;

    public GreenDaoManager (Context context) {
        this.mContext = context;
        // 获取DAO实例
        mdemoModelDao = MyApplication.getDaoSession().getDemoModelDao();
    }
    
  // 获取全部的数据
    public List<DemoModel> getAll() {
        return mdemoModelDao.loadAll();
    }
    // 通过id获取数据
    public DemoModel getDemoId(Long id) {
        return mdemoModelDao.load(id);
    }
    // 删除 通过id
    public void deleteId(Long id) {
        mdemoModelDao.deleteByKey(id);
    }
    // 修改
    public void upDate(DemoModel demoModel) {
        mdemoModelDao.update(demoModel);
    }
    // 通过条件 获取数据 and 查询
    public List<DemoModel> getRequi(String name, String age) {
       return mdemoModelDao.queryBuilder().where(DemoModelDao.Properties.Name.eq(name),DemoModelDao.Properties.Age.eq(age)).list();
    }
    // 通过条件 获取数据 or 查询
    public List<DemoModel> getRequi2(String name, String age) {
       return mdemoModelDao.queryBuilder().whereOr(DemoModelDao.Properties.Name.eq(name),DemoModelDao.Properties.Age.eq(age)).list();
    }
    // 模糊查询
    public List<DemoModel> geVague(String name) {
       return mdemoModelDao.queryBuilder().where(DemoModelDao.Properties.Name.like("%"+name+"%")).list();
    }
    // 排序根据id 排序  orderAsc升序 orderDesc倒序  654321
    public List<DemoModel> gesort() {
        return mdemoModelDao.queryBuilder().orderDesc(DemoModelDao.Properties.Id).list();
    }

  • 判断条件
//等于
eq()

//不等于
notEq() 

//值等于
like()

//取中间范围
between()

//in命令
in()

//not in 命令
notIn()

//大于
gt()

//小于
lt()

//大于等于
ge()

//小于等于
le()

//为空
isNull()

//不为空
isNotNull()
  • QueryBuilder查询常用方法
// 条件,AND 连接
public QueryBuilder<T> where(WhereCondition cond, WhereCondition... condMore)

// 条件,OR 连接
public QueryBuilder<T> whereOr(WhereCondition cond1, WhereCondition cond2, WhereCondition... condMore)

//去重
public QueryBuilder<T> distinct()

//分页
public QueryBuilder<T> limit(int limit)

//偏移结果起始位,配合limit(int)使用
public QueryBuilder<T> offset(int offset)

//排序,升序
public QueryBuilder<T> orderAsc(Property... properties)

//排序,降序
public QueryBuilder<T> orderDesc(Property... properties)

// 排序,自定义
public QueryBuilder<T> orderCustom(Property property, String customOrderForProperty)

// 排序,SQL 语句
public QueryBuilder<T> orderRaw(String rawOrder)

//本地化字符串排序,用于加密数据库无效
public QueryBuilder<T> preferLocalizedStringOrder()

//自定义字符串排序,默认不区分大小写
public QueryBuilder<T> stringOrderCollation(String stringOrderCollation)