Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画

简介: Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return “UserInfo{” +
“id=” + id +
“, userName='” + userName + ‘’’ +
“, phoneNumber='” + phoneNumber + ‘’’ +
“, address='” + address + ‘’’ +
‘}’;
}
}
2.2. 查看UserInfoDAO,DaoMaster及DaoSession

上述操作结束之后,在工程目录下,GreenDAO的生成目录中可以找到相应的数据库操作类,我实体类UserInfo的操作类名称为UserInfoDAO,同时也会自动生成DaoMaster和DaoSession

可以看到生成了三个文件,一个是实体类的操作类,还有DaoMaster,DaoSession等类。

我们先看看DaoMaster类,DaoMaster类主要定义了几个函数

(1)createAllTables、dropAllTables
/** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) {
UserInfoDao.createTable(db, ifNotExists);
}
/** Drops underlying database table using DAOs. */
public static void dropAllTables(Database db, boolean ifExists) {
UserInfoDao.dropTable(db, ifExists);
}
这两个方法表明了DaoMaster的两个作用,创建和删除所有表。
(2)newSession
public DaoSession newSession() {
return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
}
public DaoSession newSession(IdentityScopeType type) {
return new DaoSession(db, type, daoConfigMap);
}
这两个类可以创建Session绘画,有两种重载形式,一种可以让我们自定义类型。
(3)构造函数
public DaoMaster(SQLiteDatabase db) {
this(new StandardDatabase(db));
}
public DaoMaster(Database db) {
super(db, SCHEMA_VERSION);
registerDaoClass(UserInfoDao.class);
}
两个重载形式,一个时生成一个数据库,另一个则是注册Config,查看一下registerDaoClass类则会发现,daoConfigMap是一个Map结构
protected final Map>, DaoConfig> daoConfigMap;
protected void registerDaoClass(Class> daoClass) {
DaoConfig daoConfig = new DaoConfig(db, daoClass);
daoConfigMap.put(daoClass, daoConfig);
}
通过传进来的UserInfoDao.class作为key,对这个daoConfig进行绑定操作。
而进入到DaoConfig类中,查看DaoConfig的源码时,可以看到注释中的介绍
/**
• Internal class used by greenDAO. DaoConfig stores essential data for DAOs, and is hold by AbstractDaoMaster. This
• class will retrieve the required information from the DAO classes.
*/
DaoConfig存储DAO的基本数据,并由AbstractDaoMaster所持有。 该类将从DAO类中检索所需的信息。即将DAO类作为key来检索信息
而DaoSession类则主要是用来操作DAO对象的,它有三个方法
(1)构造函数
public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
daoConfigMap) {
super(db);
userInfoDaoConfig = daoConfigMap.get(UserInfoDao.class).clone();
userInfoDaoConfig.initIdentityScope(type);
userInfoDao = new UserInfoDao(userInfoDaoConfig, this);
registerDao(UserInfo.class, userInfoDao);
}
从代码中我们可以看到,构造函数做了这么几件事儿
1.取出map中对应DAO的daoConfig
2.初始化缓存类型
3.根据配置可以得到一个DAO对象
4.将DAO对象进行注册,也是通过Map进行管理
(2)getUserInfoDao方法
public UserInfoDao getUserInfoDao() {
return userInfoDao;
}
可返回dao对象,说明可以返回dao对象并对其进行具体的操作了。
(3)clear函数
public void clear() {
userInfoDaoConfig.clearIdentityScope();
}
clear函数就是清楚缓存的函数, clearIdentityScope()
2.3编写DaoManage类

其实,上面操作过后,可以直接进行数据库的使用了,但是这里仍然编写了一个DaoManage类,希望在使用过程中更方便的进行初始化工作

主要内容就是进行各种变量的初始化之后,获得数据库,获取DaoSession对象好对表进行数据操作。

代码如下:

public class DaoManage {
private Context mContext;
//数据库的名称
private static final String DB_NAME = “user.db”;
//多线程中要被共享的要用volatile修饰,Greendao管理类
private volatile static DaoManage mInstance;
//DAOMaster 保存数据库对象
private static DaoMaster mDaoMaster;
//Helper类
private static DaoMaster.DevOpenHelper mHelper;
//Dao对象中的增删改查的对象
private static DaoSession mDaoSession;
private DaoManage(){
}
//使用单例模式来获取GreenDao管理类的对象,即操作数据库的对象
public static DaoManage getInstance(){
if (mInstance == null){
synchronized (DaoManage.class){
if(mInstance == null){
mInstance = new DaoManage();
}
}
}
return mInstance;
}
//初始化上下文
public void init(Context context){
this.mContext = context;
}
//创建(若没有)并获取数据库
public DaoMaster getDaoMaster(){
if(mDaoMaster == null){
//创建一个数据库
mHelper = new DaoMaster.DevOpenHelper(mContext, DB_NAME, null);
mDaoMaster = new DaoMaster(mHelper.getWritableDatabase());
}
return mDaoMaster;
}
//获取DaoSession对象,完成增删改查操作
public DaoSession getDaoSession(){
if(null == mDaoSession){
//若表为空,new一个
if(null == mDaoMaster){
//若数据库为空,则创建数据库
mDaoMaster = getDaoMaster();
}
mDaoSession = mDaoMaster.newSession();
}
return mDaoSession;
}
//关闭连接
public void closeConnection(){
if(mHelper != null){
mHelper.close();
mHelper = null;
}
if(mDaoSession != null){
mDaoSession.clear();
mDaoSession = null;
}
}
}

三、GreenDao使用(2)

3.1. 编写DBHelper类

实际上,GreenDao的数据库操作已经十分简便,我们是可以直接进行使用的,但是为了更加整洁的使用,我还是将增删改查的操作进行了封装,写在了DBHelper类中

(0)加入UserInfoDao对象属性并初始化

private UserInfoDao userInfoDao = DaoManage.getInstance().getDaoSession().getUserInfoDao();

(1)按id查找数据
//查找(按id查找)
public UserInfo queryById(Long id){
List list = userInfoDao.queryBuilder().where(UserInfoDao.Properties.Id.eq(id)).build().list();
UserInfo userInfo = list.isEmpty() ? null : list.get(0);
return userInfo;
}
(2)查找全部
//查找全部
public List queryAll(){
return userInfoDao.queryBuilder().build().list();
}

查询还可以批量查询,多条件查询,模糊搜索等等内容,由于太多,就不全部列出来了,可以查阅相关文档按照需要进行使用。

(3)增
//增加
public void add(UserInfo userInfo){
if (queryById(userInfo.getId()) == null){
userInfoDao.insert(userInfo);
}else{
userInfoDao.update(userInfo);
}
}
//批量增加
public void add(List userInfoList){
userInfoDao.insertInTx(userInfoList);
}
(4)删
//删除一个对象
public void delete(UserInfo userInfo){
userInfoDao.delete(userInfo);
}
//删除一个列表的对象
public void deleteByList(List userInfoList){
userInfoDao.deleteInTx(userInfoList);
}
//按主键删除
public void delteByKey(long key){
userInfoDao.deleteByKey(key);
}
//按主键列表删除
public void deleteByKeyList(List idList){
userInfoDao.deleteByKeyInTx(idList);
}
//删除所有
public void deleteAll(){
userInfoDao.deleteAll();
}
(5)改
//修改
public boolean update(UserInfo userInfo){
UserInfo findUser = userInfoDao.queryBuilder().where(UserInfoDao.Properties.Id.eq(userInfo)).build().unique();
if (findUser != null){
userInfoDao.update(userInfo);
return true;
}else{
return false;
}
}
3.2.在MainActivity中进行使用

在Android6.0之后,我们需要在代码中先对权限进行检查,即检查有没有文件的读写权限,如果没有权限,要申请权限,所以在onCreate()函数中,在前面要先加入一段代码:

//检查当前权限,如果没有,申请request,
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
//申请一个或多个权限
ActivityCompat.requestPermissions(MainActivity.this, new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
}, 100);
}

在类中添加DBHelper类的成员对象,并进行初始化

DBHelper dbHelper = new DBHelper();


相关文章
|
10天前
|
算法 JavaScript Android开发
|
19天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
72 1
|
21天前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
25 1
|
17天前
|
XML IDE Java
安卓应用开发入门:从零开始的旅程
【10月更文挑战第23天】本文将带领读者开启一段安卓应用开发的奇妙之旅。我们将从最基础的概念讲起,逐步深入到开发实践,最后通过一个简易的代码示例,展示如何将理论知识转化为实际的应用。无论你是编程新手,还是希望扩展技能的软件工程师,这篇文章都将为你提供有价值的指导和启发。
25 0
|
1月前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
74 7
|
2月前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
60 10
|
1月前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
41 0
|
2月前
|
前端开发 Java 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
在Android开发领域,框架犹如指路明灯,助力开发者加速应用开发并提升品质。本文将介绍五大必备框架:Retrofit简化网络请求,Room优化数据库访问,MVVM架构提高代码可维护性,Dagger 2管理依赖注入,Jetpack Compose革新UI开发。掌握这些框架,助你在竞争激烈的市场中脱颖而出,打造爆款应用。
329 3
|
2月前
|
IDE Java 程序员
安卓应用开发入门:打造你的第一个“Hello World”
【9月更文挑战第11天】在编程的世界里,每一个初学者的旅程都从一个简单的“Hello World”开始。本文将带领安卓开发的新手们,通过简单直观的方式,一步步构建出自己的第一个安卓应用。我们将探索安卓工作室(Android Studio)的安装、项目的创建,以及如何运行和调试你的应用。无论你是编程新手还是想扩展技能的老手,这篇文章都将为你打开一扇通往安卓世界的大门。
169 7
|
2月前
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
76 8