返回

GreenDao:从使用到源码(一文完结)

Android

GreenDao 简介

GreenDao 是一个用于 Android 的轻量级持久化框架,它允许您以面向对象的方式访问数据库。GreenDao 使用注解来定义实体类,并自动生成与实体类对应的 DAO(Data Access Object)类。这样,您就可以使用 DAO 类来操作实体类的数据,而无需编写任何 SQL 语句。

GreenDao 的使用

1. 导入依赖

在您的项目中添加 GreenDao 的依赖。

dependencies {
    implementation 'org.greenrobot:greendao:3.2.2'
}

2. 定义实体类

实体类是 GreenDao 中最基本的概念,它代表了数据库中的一个表。实体类必须使用 @Entity 注解进行标记,并使用 @Id 注解来指定主键。

@Entity
public class Person {
    @Id
    private Long id;
    private String name;
    private int age;
}

3. 生成 DAO 类

GreenDao 会自动为每个实体类生成一个 DAO 类。DAO 类负责对实体类的数据进行增删改查操作。DAO 类是通过编译期间的代码生成工具生成的,您无需手动编写。

4. 使用 DAO 类操作数据

您可以使用 DAO 类来对实体类的数据进行增删改查操作。DAO 类提供了各种方法来操作数据,例如 insert()update()delete()load() 等。

// 插入一条数据
Person person = new Person();
person.setName("John Doe");
person.setAge(20);
daoSession.getPersonDao().insert(person);

// 更新一条数据
person.setAge(21);
daoSession.getPersonDao().update(person);

// 删除一条数据
daoSession.getPersonDao().delete(person);

// 加载一条数据
Person loadedPerson = daoSession.getPersonDao().load(person.getId());

5. 迁移数据库

当您修改实体类的结构时,需要对数据库进行迁移。GreenDao 提供了 MigrationHelper 类来帮助您进行数据库迁移。

public class MigrationHelper extends DaoMaster.OpenHelper {
    public MigrationHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO: Migrate the database from oldVersion to newVersion
    }
}

6. 使用 GreenDao 的最佳实践

  • 使用 GreenDao 时,应遵循以下最佳实践:
  • 实体类应该使用 @Entity 注解进行标记,并使用 @Id 注解来指定主键。
  • DAO 类是通过编译期间的代码生成工具生成的,您无需手动编写。
  • 您可以使用 DAO 类来对实体类的数据进行增删改查操作。
  • 当您修改实体类的结构时,需要对数据库进行迁移。
  • GreenDao 提供了 MigrationHelper 类来帮助您进行数据库迁移。

GreenDao 的源码分析

GreenDao 的源码位于 GitHub 上,您可以通过以下链接查看:

https://github.com/greenrobot/greendao

GreenDao 的源码结构清晰,易于理解。GreenDao 的核心类包括 DaoMasterDaoSessionEntityPropertyQueryBuilder 等。这些类共同构成了 GreenDao 的框架。

1. DaoMaster

DaoMaster 类是 GreenDao 的核心类之一,它负责创建和管理数据库。DaoMaster 类提供了各种方法来创建和管理数据库,例如 createDatabase()dropDatabase()getDatabase() 等。

2. DaoSession

DaoSession 类是 GreenDao 的另一个核心类,它负责管理实体类的 DAO 类。DaoSession 类提供了各种方法来获取实体类的 DAO 类,例如 getPersonDao()getStudentDao() 等。

3. Entity

Entity 类是 GreenDao 的基本概念,它代表了数据库中的一个表。Entity 类使用 @Entity 注解进行标记,并使用 @Id 注解来指定主键。

4. Property

Property 类是 GreenDao 的另一个基本概念,它代表了实体类的一个属性。Property 类使用 @Property 注解进行标记,并指定属性的类型、名称等信息。

5. QueryBuilder

QueryBuilder 类是 GreenDao 的一个重要类,它用于构建查询语句。QueryBuilder 类提供了各种方法来构建查询语句,例如 where()orderBy()limit() 等。

总结

GreenDao 是一款轻量级、易于使用的对象关系映射框架,它可以帮助您快速、方便地操作数据库。GreenDao 的源码结构清晰,易于理解,如果您想深入了解 GreenDao 的原理,可以阅读 GreenDao 的源码。