Android JetPack架构——结合记事本Demo一篇打通对Sqlite的增删改查结合常用jetpack架构应用

本文介绍了如何在Android应用中使用JetPack的Room库进行数据库操作,包括数据库实体类、管理类、操作接口的编写。同时,探讨了Repository模式、AsyncTask在数据访问中的作用,以及为何使用ViewModel和LiveData。通过一个记事本Demo,详细展示了如何在Android应用中实现增删改查功能,并讨论了UI与数据层的解耦。
摘要由CSDN通过智能技术生成

Room是Google提供的一个ORM库。

Room持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。

Room组件架构体系

=====================================================================

Entity,Dao,Database为Room的3大基本组件,不同组件之间的关系如图

Android架构组件(四):Room | Power

Database:包含数据库持有者,并作为应用已保留的持久关系型数据的底层连接的主要接入点

使用方法:用@Database来注解类,且使用 @Database注释的类应满足以下条件

  • 是扩展RoomDatabase的抽象类。

  • 在注释中添加与数据库关联的实体列表。

  • 包含具有 0 个参数且返回使用 @Dao 注释的类的抽象方法。

在运行时,可以通过调用 Room.databaseBuilder()Room.inMemoryDatabaseBuilder() 获取 Database 的实例。

Entity:表示数据库中的表

使用方法:用@Entit来注解实体类。

Dao:提供访问数据库的方法

使用方法:@Dao用来注解一个接口或者抽象方法。

记事本应用讲解

==================================================================

Room作为JetPack架构组件中关于SQLite数据库的架构组件,对应有着自己的知识体系。下面通过记事本Demo对Room本身组件结合MVVM架构所涉及的知识体系做一个总结.

由于涉及到另外一些组件,在有使用到时会做简要介绍.

在这里插入图片描述

记事本Demo效果图:

在这里插入图片描述

1.编写Room数据库


1.1 编写数据库实体类

@Data

@Entity(tableName = “note”)

public class Note implements Serializable {

@PrimaryKey(autoGenerate = true)

private int id;

@ColumnInfo(name = “title”)

private String title;

@ColumnInfo(name = “content”)

private String content;

@ColumnInfo(name = “last_update_time”)

private Date lastUpdateTime;

}

1.2 编写数据库管理类Database

注意:因为实体类中存在复杂数据类型——时间类。所以在数据库管理中需要使用@TypeConverters注入转换类,对复杂类型进行统一的转换处理

@Database(entities = {Note.class},version = 1,exportSchema = false)

@TypeConverters({Converters.class})

public abstract class NoteDatabase extends RoomDatabase {

private static NoteDatabase INSTANCE;

public synchronized static NoteDatabase getINSTANCE(Context context) {

if (INSTANCE==null) {

INSTANCE = Room.databaseBuilder(context.getApplicationContext(),NoteDatabase.class,“note_datebase”)

.fallbackToDestructiveMigration()

.build();

}

return INSTANCE;

}

/**

  • 在@Database中 多个entity则写多个Dao

*/

public abstract NoteDao getNoteDao();

}

1.3 编写数据库操作接口Dao

@Dao

public interface NoteDao {

@Insert

void insertNotes(Note… notes);

@Update

void updateNotes(Note… notes);

@Delete

void deleteNotes(Note… notes);

@Query(“delete from note”)

void deleteAllNotes();

@Query(“select * from note order by last_update_time desc”)

LiveData<List> queryAllNotes();

@Query(“select * from note where content like :pattern order by last_update_time desc”)

LiveData<List> queryNotesWithPattern(String pattern);

}

2.编写数据仓库(Repository、AsyncTask)


如果此处不引入Repository类会造成什么影响呢?为什么要引入Repository?

对数据库的操作(调用Dao)逻辑将放于ViewModel中(步骤5)。使得ViewModel中代码变得杂乱

引入仓库类,用于对数据库操作并对ViewModel暴露方法。让ViewModel专注于数据处理而非对数据库的调用,对ViewModel和Dao进一步解耦。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值