数据库GreenDao的详细用法
这里写自定义目录标题
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
上一篇: JavaScript实现HTML导航栏下拉菜单[悬浮显示]
下一篇: 不是偷我的吧
推荐阅读
-
php中get_headers函数的作用及用法的详细介绍
-
详细介绍MySQL之-Centos安装多个mysql数据库的配置实例
-
Object.wait()与Object.notify()的用法详细解析
-
mysql数据库replace、regexp的用法
-
Object.wait()与Object.notify()的用法详细解析
-
mysql数据库备份及恢复命令 mysqldump,source的用法
-
Centos7下使用yum安装mysql数据库的详细教程(增强版)
-
mysql数据库replace、regexp的用法
-
SQL Server 数据库的备份详细介绍及注意事项
-
mysql数据库备份及恢复命令 mysqldump,source的用法