使用ORM数据库:greenDao

1. 添加依赖:

// 在总的 build.gradle 中

buildscript {

repositories {

jcenter()

 mavenCentral() // 加入仓库

}

dependencies {

classpath 'com.android.tools.build:gradle:2.3.1'

 classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0' // 添加插件

}

}

// 在应用程序的 build.grdle 中

apply plugin: 'com.android.application'

apply plugin: 'org.greenrobot.greendao' //添加应用插件

dependencies {

compile 'org.greenrobot:greendao:3.0.1'

compile'org.greenrobot:greendao-generator:3.0.0'

}

//应用程序的 build.grdle 的 android 中

android{

    ...

greendao {

schemaVersion 1//数据库版本号

daoPackage 'com.xxx.xxx.greendao'//设置 DaoMaster、DaoSession、Dao 包名

targetGenDir 'src/main/java'//设置 DaoMaster、DaoSession、Dao 目录

//targetGenDirTest:设置生成单元测试目录

//generateTests:设置自动生成单元测试用例

    }

}

2. 使用样例:

实体类 User

@Entity//标示是一个greenDao需要生成的类

public class User {

@Id(autoincrement = true)//标示是自增长的id,必须是Long型

private Long id;

private String name;

    private int age;

    @Transient//表示不会存储此字段

    private boolean isCheck;

}

3.  相关注解说明 :

3.1. 实体@Entity 注解

schema:告知 GreenDao 当前实体属于哪个 schema

active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法

nameInDb:在数据库中使用的别名,默认使用的是实体的类名

indexes:定义索引,可以跨越多个列

createInDb:标记创建数据库表

3.2. 基础属性注解

@Id:主键 Long 型,可以通过@Id(autoincrement = true)设置自增长

@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “name”)

@NotNull:设置数据库表当前列不能为空

@Transient:添加此标记后不会生成数据库表的列

3.3. 索引注解

@Index:使用@Index 作为一个属性来创建一个索引,通过 name 设置索引别名,也可以通过 unique 给索引添加约束

@Unique:向数据库添加了一个唯一的约束

3.4. 关系注解:

@ToOne:定义与另一个实体(一个实体对象)的关系

@ToMany:定义与多个实体对象的关系

4. 当编写好实体类并添加了注解之后,点击Make Project或者Make Module * ,就会在自己设定的目录下看到生成的类文件,并且

会自动生成各个属性的 get,set 方法

5. 初始化(一般在 Application 中)

DaoMaster.DevOpenHelper openHelper=new DaoMaster.DevOpenHelper(上下文,数据库名字);//也有三个参数的构造,第三个参

数是游标工厂

Database db=openHelper.getWritableDb();

DaoMaster daoMaster=new DaoMaster(db);

ormDao=daoMaster.newSession();//这个 ormDao 就是要用于操作的

6. 增删改查的操作(要 try 一下,如果有异常表示操作失败)

6.1. 增:ormDao.get 实体类名 Dao().insert(对象);//注意,Long 型 id 如果传入 null,则会自增长

6.2. 删: deleteBykey(主键) :根据主键删除一条记录。

delete(对象) :根据实体类删除一条记录,一般结合查询方法,查询出一条记录之后删除。

deleteAll(): 删除所有记录。

6.3. 改:update(对象);//应该是根据主键改的

6.4. 查: loadAll():查询所有记录

load(Long key):根据主键查询一条记录

queryBuilder().list():返回:List 列表

queryBuilder().where(UserDao.Properties.Name.eq(“”)).list():返回:List 列表

queryRaw(String where,String selectionArg):返回:List 列表

6.5. 高级查询:

.orderAsc(类.字段)//按照字段进行正序排序,应该有 desc,倒序

.or()//条件或者,可以加多个条件,中间用逗号隔开

.and()//条件并且,可以加多个条件,中间用逗号隔开

queryBuilder() .offset(0* 20).limit(20).list();//分页查询,现在是查询第 1 页,每页 20 条数据

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容