GreenDAO详解
2019-05-14 本文已影响0人
quanCN
简介
greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。
官方文档
项目搭建
-
Gradle
引入jar包
在app/build.gradle
文件中加入implementation 'org.greenrobot:greendao:3.2.2'
- 安装
Gradle
插件
在根目录下build.gradle
文件中加入
在buildscript { dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' } }
app/build.gradle
文件中加入apply plugin: 'org.greenrobot.greendao'
- 设置数据库版本!!!
在app/build.gradle
文件中加入android { ... } greendao { schemaVersion 2 }
greendao
配置元素支持许多配置选项
schemaVersion
:数据库模式的当前版本。如果更改实体/数据库架构,则必须增加此值!!!!默认为1。
daoPackage
:生成的DAO,DaoMaster和DaoSession的包名。 默认为源实体的包名称。
targetGenDir
:应存储生成的源的位置。 默认为构建目录( build/generated/source/greendao中生成的源文件夹。
generateTests
:设置为true以自动生成单元测试。
targetGenDirTests
:应存储生成的单元测试的基本目录。默认为src/androidTest/java
。 - 检验
随便创建一个javaBean@Entity public class Person { @Id private Long id; private String name; }
注意:不需要写getter,setter方法和构造方法!!!
Rebuild Project存在DaoMaster
类即为成功
核心类
-
DaoMaster
DaoMaster
是greenDAO
使用入口,DAOMaster包含数据库对象(sqliteDatabase),管理DAO类(不是对象)。可以创建删除表,其内部类OpenHelper
和DevOpenHelper
是SQLiteOpenHelper
实现。 -
DaoSession
管理所有可用DAO对象,通过getter方法获取指定DAO对象。提供了像insert
,load
,update
,refresh
和delete
这样的方法 -
DAOs
数据访问对象(DAO) -
Entities
javaBean/pojo对象
GreenDao初始化
- 扩展
Application
添加DaoSession
对象public class App extends Application { private DaoSession daoSession; @Override public void onCreate() { super.onCreate(); DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "person-db"); SQLiteDatabase db = helper.getWritableDb(); daoSession = new DaoMaster(db).newSession(); } public DaoSession getDaoSession() { return daoSession; } }
-
AndroidManifest
文件中指定自定义的Application
<application android:name=".App"> </application>
- 这样即可在任意
Activity
或Fragment
中获得指定DAODaoSession daoSession = ((App) getApplication()).getDaoSession(); PersonDao personDao = daoSession.getPersonDao();
配置javaBean
@Entity
public class Person {
@Id
private Long id;
@NotNull
private String name;
}
- @Entity注解
schema
:告知GreenDao当前实体属于哪个schema
active
:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
nameInDb
:在数据库中使用的别名,默认使用的是实体的类名
indexes
:定义索引,可以跨越多个列
createInDb
:标记创建数据库表 - 基础属性注解
@Id
:主键 Long/long 型,可以通过@Id(autoincrement = true)设置自增长
@Property
:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name")
@NotNull
:设置数据库表当前列不能为空
@Transient
:添加此标记后不会生成数据库表的列 - 索引注解
@Index
:为相应的数据库列创建数据库索引,name
设置别名,unique
添加约束@Index(unique = true) private String name;
@Unique
:添加约束@Unique private String name;
注:javaBean发生更改,会创建新的数据表,之前对应数据库表数据也全部删除!!!
增删改查
- 增加
只需要执行DAO对象的insert()
方法即可personDao.insert(new Person(null,"Tom"));
- 删除
DAO对象deleteByKey()
方法personDao.deleteByKey(3L);
- 更改
DAO对象update()
方法Person person = new Person(1L,"Ming"); personDao.update(person);
- 查询
loadAll()
或load()
进行简单查询
使用List<Person> people = personDao.loadAll(); Log.d("SQLite Data", people+"");
QueryBuilder
进行复杂查询List<Person> people = personDao.queryBuilder().where( PersonDao.Properties.Age.between(16,18)).list(); Log.d("SQLite Data", people+"");