簡介
GreenDao 是一個輕量級的對象關系映射(ORM)庫,用于簡化 Android 應用中的數據庫操作。它提供了以下主要功能:
- 簡化數據庫操作:通過注解定義實體類,GreenDao 自動生成 DAO(數據訪問對象)類,簡化了數據庫的增、刪、改、查操作
- 高性能:GreenDao 設計目標之一是高效地執行數據庫操作,尤其在處理大量數據時表現出色
- 自動生成代碼:通過編譯時生成代碼,減少了手動編寫 SQL 和數據處理邏輯的需要
- 事務支持:支持數據庫事務,確保數據操作的原子性和一致性
- 靈活性:可以通過自定義查詢和批量操作,滿足復雜的數據處理需求
- 小巧:庫體積小,適合需要輕量級 ORM 的應用
開發工具集成
- 在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 1daoPackage '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? = nullprivate 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.writableDbdaoSession = 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)}
}