GreenDao 优点:
GreenDao主要类介绍:
DaoMaster:该类是使用greenDao的主要入口。DaoMaster负责控制数据库对象和管理指定数据库的DAO类。DaoMaster提供了静态的方法去创建数据库表或者删除它们。他的内部类OpenHelper、DevOpenHelper是SQLiteOpenHelper的实现类,它们在SQLite数据库中负责创建数据库。
**DaoSession:**DaoSeesion对象负责为指定的数据库管理所有的可用的DAO对象,你可以通过getter方法获取到DaoSeession的实例。DaoSession也针对实体bean提供了增删改查等api接口,DaoSession也保持了对标识范围的跟踪。
**DAOs:**数据获取(DAOs)持久化的对象并查询实体。 对于每个实体,greenDAO为它生成一个DAO类。 它具有比DaoSession更多的持久化方法,例如:count,loadAll和insertInTx。
**Entities:**持久化对象,通常,实体是使用标准Java属性(如POJO或JavaBean)表示数据库行的对象。
集成:
1、you need to add the greenDao Gradle plugin to your project’s build.gradle
1
2
3
4
5
6
7
8
9
10
11
|
apply from:"config.gradle"
buildscript {
...
dependencies {
...
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
...
|
2、you need to add the greenDao library to your module’s build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
android {
...
}
//greendao配置
greendao {
//版本号,升级时可配置
schemaVersion 1
}
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
|
3、core initialization
1
2
3
4
5
6
7
|
// do this once, for example in your Application class
helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
// do this in your activities/fragments to get hold of a DAO
noteDao = daoSession.getNoteDao();
|
greenDao注解学习笔记:
@Entity:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
@Entity(
// If you have more than one schema, you can tell greenDAO
// to which schema an entity belongs (pick any string as a name).
schema = "myschema",
// Flag to make an entity "active": Active entities have update,
// delete, and refresh methods.
active = true,
// Specifies the name of the table in the database.
// By default, the name is based on the entities class name.
nameInDb = "AWESOME_USERS",
// Define indexes spanning multiple columns here.
indexes = {
@Index(value = "name DESC", unique = true)
},
// Flag if the DAO should create the database table (default is true).
// Set this to false, if you have multiple entities mapping to one table,
// or the table creation is done outside of greenDAO.
createInDb = false,
// Whether an all properties constructor should be generated.
// A no-args constructor is always required.
generateConstructors = true,
// Whether getters and setters for properties should be generated if missing.
generateGettersSetters = true
)
public class User {
...
}
|
@Entity注解标记一个java类将作为greenDAO的持久化实体。
schema:指定数据库,如果你有多个数据库时可以为表指定对应的数据库。
active:标记一个实体是否时激活的,激活状态下的实体bean将获得更新,删除,刷新方法。
nameInDb:指定表在数据库中的表名,默认为实体类的类名。
indexes:定义索引,可以跨越多个列
createInDb:标记是否创建数据库表
generateConstructors:标记是否所有的属性的构造方法都被生成
generateGettersSetters:标记如果属性的setters和getters方法缺少时是否自动生成。
基本属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
@Property(nameInDb = "USERNAME")
private String name;
@NotNull
private int repos;
@Transient
private int tempUsageCount;
...
}
|
@Id:主键 Long型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=“name”)
@NotNull:设置数据库表当前列不能为空
@Transient:添加次标记之后不会生成数据库表的列
@Index**:**使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique**:**向数据库列添加了一个唯一的约束
**@ToOne:**定义与另一个实体(一个实体对象)的关系
**@ToMany:**定义与多个实体对象的关系