简介

GreenDao 是一个轻量级的对象关系映射(ORM)库,用于简化 Android 应用中的数据库操作。它提供了以下主要功能:

  • 简化数据库操作:通过注解定义实体类,GreenDao 自动生成 DAO(数据访问对象)类,简化了数据库的增、删、改、查操作
  • 高性能:GreenDao 设计目标之一是高效地执行数据库操作,尤其在处理大量数据时表现出色
  • 自动生成代码:通过编译时生成代码,减少了手动编写 SQL 和数据处理逻辑的需要
  • 事务支持:支持数据库事务,确保数据操作的原子性和一致性
  • 灵活性:可以通过自定义查询和批量操作,满足复杂的数据处理需求
  • 小巧:库体积小,适合需要轻量级 ORM 的应用
开发工具集成
  1. 在project的build.gradle下添加classpath 依赖
    dependencies {
        classpath "com.android.tools.build:gradle:4.2.2"
        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
    }

2.在app的build.gradle下添加greendao依赖

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

greendao {
    schemaVersion 1
    daoPackage 'com.example.greendaodemo.dao'
    targetGenDir 'src/main/java'
}

3.Androidstudio和gradle以及GreenDao版本对应表

开发工具的版本和gradle版本以及greendao版本要配套使用,否则依赖编译会报错。

GreenDAO 版本 所需 Gradle 版本 推荐 Android Studio 版本
3.3.0+ Gradle 8.0+ AS Flamingo (2022.2.1)+
3.3.0 Gradle 6.7 ~ 7.x AS 4.2 ~ Arctic Fox
3.2.x 及以下 Gradle 4.x ~ 6.x AS 3.x ~ 4.1
具体使用

1.创建entity对象

@Entity
public class User {
    @Id(autoincrement = true)
    private Long id;

    private String name;

    private int age;

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

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

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

2.封装Manager管理类

object GreenDaoManager {
    private var daoSession: DaoSession? = null
    private const val DB_NAME = "user.db"
    private const val TAG = "GreenDaoManager"

    fun init(context: Context) {
        if (daoSession == null) {
            Log.d(TAG, "GreenDaoManager 已初始化")
        }

        val helper = DaoMaster.DevOpenHelper(context, DB_NAME)
        val db = helper.writableDb
        daoSession = DaoMaster(db).newSession()
    }

    private fun getDaoSession(): DaoSession {
        if (daoSession == null) {
            Log.d(TAG, "GreenDaoManager 尚未初始化,请先调用 init(context)")
        }
        return daoSession!!
    }

    // 获取某个实体的 DAO(以 User 为例)
    fun getUserDao(): UserDao {
        return getDaoSession().userDao
    }

    // 可添加其他 DAO 的快捷访问方法
}

3.Application中进行初始化

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        GreenDaoManager.init(this)
    }
}

結果打印

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐