当前位置: 移动技术网 > 移动技术>移动开发>Android > 数据库GreenDao的详细用法

数据库GreenDao的详细用法

2020年07月17日  | 移动技术网移动技术  | 我要评论


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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网