一、配置GreenDao
// In your root build.gradle file:
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
二、实体类
编写数据实体类
三、增删改查
1、增 insert(),insertOrReplace()数据存在则替换,不存在则插入
a、生成daoSession对象:
DaoSession daoSession = ((Application)getApplication()).getDaoSession();
b、实体类存入数据set方法
c、daoSession.insert(实体类对象);
2、删 delete() deleteAll()
daoSession.delete(实体类对象);
daoSession.deleteAll(实体类.class);
3、改 update()
daoSession.update(实体类);
4、查 loadAll()所有数据 queryRaw()条件查询
List<实体类> 实体类对象 = daoSession.loadAll(实体类.class);
List<实体类> 实体类对象 = daoSession.queryRaw(实体类.class,"where column_name = ?",值);
a、使用QueryBuilder进行查询操作
QueryBuilder<实体类> qb = daoSession.queryBuilder(实体类.class);
List<实体类> list = qb.list();//查询所有
QueryBuilder<实体类> queryBuilder = qb.where(条件).orderAsc(column);
List<实体类> list1 = queryBuilder.list();//查询条件对应
//原始查询
Query<Student> query = daoSession.queryBuilder(Student.class).where(
new WhereCondition.StringCondition("_ID IN " +
"(SELECT _ID FROM STUDENT WHERE _ID > 5)")
).build();
四、注解
@Entity 实体类 创建对应的表
schema:如果你有多个架构,你可以告诉 GreenDao 当前属于哪个架构。
active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法。
nameInDb:在数据中使用的别名,默认使用的是实体的类名。
indexes:标记如果 DAO 应该创建数据库表(默认为true),如果您有多个实体映射到一个表,或者表的创建是在 greenDAO 之外进行的,那么将其设置为 false。
createInDb:标记创建数据库表。
generateGettersSetters:如果缺少,是否应生成属性的 getter 和 setter 方法。
@Id 主键 long / Long属性。
在数据库方面,它是主键。参数autoincrement = true 表示自增,id 不给赋值或者为赋值为 null 即可(这里需要注意,如果要实现自增,id 必须是 Long,为 long 不行!)。
@Property 制定属性名
@Property (nameInDb="name")
//数据库中的表格属性名为"name",如果不设置,数据库中表格属性名为"NAME"
String name;
@NotNull 当前列不能为空
@Transient 使当前属性不生成数据库表的列
@Index 创建索引 name设置别名,unique设置唯一
@ToOne 定义与另一个实体(一个实体对象)的关系 @ToOne(joinProperty=“name”)
@ToMany 定义与多个实体对象的关系 @ToMany(referencedJoinProperty=“id”);
五、数据库加密——SQLCipher
1、导入加密库文件
implementation 'net.zetetic:android-database-sqlcipher:版本号'
2、修改DaoSession的生成方式
DaoMaster.DevopenHelper helper = new DaoMaster.DevOpenHelper(this,"数据库名.db");
//数据库加密密码为
Database db = helper.getEncryptedWritableDb("密码");
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
总结
没有实践,就没有发言权。我没有实践,没有感悟,所有没有总结。