欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

数据库GreenDao的详细用法

程序员文章站 2022-03-28 16:27:31
这里写自定义目录标题android 数据库GreenDao的详细用法使用GreenDao主要有几大核心的类:配置工程:在module的build.gradle文件中写bean类:主键是唯一的,设置成用户userId数据库的插入、删除、更新、查询GreeDao 基本操作:GreenDao如何进行多表联查?android 数据库GreenDao的详细用法————————————————android 数据库GreenDao的详细用法版权声明:本文为站在文章,遵循 CC 4.0 BY-SA 版权协议,转载...


android 数据库GreenDao的详细用法
————————————————

android 数据库GreenDao的详细用法

版权声明:本文为站在文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_32365567/article/details/89532712

使用GreenDao主要有几大核心的类:

前言
使用GreenDao主要有几大核心的类:
1.DaoMaster:它保存了sqlitedatabase对象以及操作DAO classes。其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。
2.DaoSession:会话层。操作具体的DAO对象,比如各种getter方法。
3.XXXDao:实际生成的xxDAO类,通常对应具体的java类,比如FoodsBeanDao等。其有更多的权限和方法来操作数据库元素。
4.XXXEntity:持久的实体对象。通常代表了一个数据库row的标准java properties。
先贴一下初始化代码过后再讲解
//创建数据库foodlist.db"
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, “foodlist.db”, null);
//获取可写数据库
SQLiteDatabase db = helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster = new DaoMaster(db);
//获取Dao对象管理者
DaoSession daoSession = daoMaster.newSession();

配置工程:

配置工程:
(参考github上的版本号,此处我用的是3.2.2)
在Project的build.gradle文件中

dependencies {
//GreenDao3依赖
classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.2’
}

在module的build.gradle文件中

apply plugin: ‘com.android.application’
apply plugin: ‘org.greenrobot.greendao’ // apply plugin
android {
sourceSets {
main {
java.srcDirs = [‘src/main/java’, ‘src/main/java-gen’]
}
}
}
greendao {
schemaVersion 1 //数据库版本号
generateTests false //设置为true以自动生成单元测试。
daoPackage ‘com.greendao.gen’ // 设置DaoMaster、DaoSession、Dao 包名
targetGenDir ‘src/main/java-gen’ //应存储生成的单元测试的基本目录。默认为 src / androidTest / java。
}
dependencies {
implementation ‘org.greenrobot:greendao:3.2.2’ // add library
}

写bean类:主键是唯一的,设置成用户userId

主键设置成多个一起组成; {Index(value=“userId,groupId”,unique=true)}
@Entity(indexes = {Index(value=“userId,groupId”,unique=true)}{)
public class AddFoodEntity {

@Id(autoiuncrement=true)
private Long id;
private String userId;
private String groupId;

}
主键可以设置成一个
@Entity(indexes = {Index(value=“userId”,unique=true)}{)
public class AddFoodEntity {

@Id(autoiuncrement=true)
private Long id;
private String userId;

关联集合
@ToMany(referendJoinProperty="userId")
List<Group> userList-new ArrayList();

}
主键可以设置成关联集合
@Entity(indexes = {Index(value=“userId,groupId”,unique=true)}{)
public class Group{

@Id(autoiuncrement=true)
private Long id;

private String groupId;

//声明关联的关系
@ToOne(joinProperty="groupId")
   private AddFoodEntity addfoodEmtity;

}

数据库的插入、删除、更新、查询

//初始化
public class MyGDApplication extends Application {

private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
//设置数据库
setGreenDaoBase();
}

//可以根据不同的用户建立不同的数据库
private void setGreenDaoBase() {
String userId=“用户id数据库名字123”
String userId=userId+".db";
//创建数据库topnews.db"
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, “userId”, null);
//获取可写数据库
SQLiteDatabase db = helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster = new DaoMaster(db);
//获取Dao对象管理者
daoSession = daoMaster.newSession();
}

public DaoSession getDaoSession() {
return daoSession;
}

}

在该Activity中初始化获取DaoSession并进行相关的操作,已经创建好了DaoSession和Bean对象,编译后会自动生成我们的AddFoodEntityDao对象,可通过DaoSession获得:
DaoSession daoSession =BaseApp.instance().getDaoSession();
AddFoodEntityDao foodsDao=daoSession.getAddFoodEntityDao();

GreeDao 基本操作:

添加数据: foodsDao.insert(); , foodsDao.insertOrReplaceInTx();
删除数据: foodsDao.delete(); foodsDao.deleteAll();
修改数据: foodsDao.update();
查询数据: foodsDao.loadAll();

foodsDao.queryBuilder();

条件查询集合: foodsDao.queryBuilder().where(FoodsBean.Properties.foodName.eq( “食物一” )) .list();
查询单个数据
foodsDao.queryBuilder().where(FoodsBean.Properties.foodName.eq( “食物一” )) .unique();
查询删除数据
foodsDao.queryBuilder().where(FoodsBean.Properties.foodName.eq( “食物一” )) .buildDelete();
executeDeleteWithoutDetachinEntities();

GreenDao如何进行多表联查?

GreenDao是通过表的主键和外键来查询的。

一对一查询:是通过 @ToOne(joinProerty = “外键ID”)注解,来声明外表

添加数据时主表的外键要和外表的主键一致 insertOrReplace方法添加表对象

查询通过queryBuilder().where(条件)方法

一对多:是通过 @ToMany(referencedJoinProperty = “外键ID”) 注解 来声明外表 因为是一对多的关系所以是外键表集合(List集合)

添加数据时主表的外键要和外表的主键一致 insertOrReplaceInTx方法添加集合表对象

查询通过queryBuilder().where(条件)方法GreenDao升级方式?

1.新建一个类继承OpenHelper(SQLite的OpenHelper)

2.重写里面的OnUpgrate

3.判断版本是否一致,一致执行原本的步骤,不一致执行版本升级
————————————————
版权声明:本文为CSDN博主「悟-静」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32365567/article/details/89532712
———————————————

本文地址:https://blog.csdn.net/lilinhualisen/article/details/107386242

相关标签: android