Android Room DataBase(三)

前言:

在前面两章,我们学会了Room的基本概念和如何创建数据库,以及定义数据库的Entity,也即表。但光有表,还不够。我们还需要再借助Dao,来实现对表的操作。废话不多说,让我们先来看看Dao的基本简介。

一、什么是Dao,为什么要创建Dao?

在Room中,Dao是一组操作数据库表的行为的集合。它即可用接口的形式,也可用抽象类的形式来表现。换言之,创建一个Dao,即是创建一个接口或是一个抽象类。如果是以抽象类的形式,那这个Dao,可以携带一个RoomDataBase类型的参数,这个暂时没发现有什么用处。Anyway, 有了Dao我们就可以对数据库表进行操作了。

二、如何定义一个Dao。

千言万语,不如几行代码,你先粗略的看一下代码片段,我再一 一做解释。

@Dao
public interface UserDao {

    @Query("select * from UserInfo")
    List<UserInfo> getAll();

    @Query("select * from UserInfo where id in (:userIds)")
    List<UserInfo> loadAllByIds(int[] userIds);

    @Query("select * from UserInfo where first_name like :first and "
            + "last_name like :last limit 1")
    UserInfo findByName(String first, String last);

    @Query("select id,first_name,last_name from UserInfo where id = :id")
    UserInfo getUserInfoViaId(int id);

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long[]  insertAll(UserInfo... users);

    @Update
    void Update(UserInfo... users);

    @Delete
    void delete(UserInfo user);
}

定义一个Dao,只要注意这几点即可:

1、Dao必须是接口或是抽象类
2、像定义Entity一样,在Dao的定义的前一行,加上注解@Dao即可。
3、Dao下的所有方法,都有一个注解。不同的注解,代表不同的意思,比如增删查改。而这些SQL语句是否合法,会在编译阶段就先过滤。如果你的SQL语句写错了,那将会编译失败。

三、在Dao中,使用Sql语句。

在这里,我不一 一的讲解增删查改的用法,因为在上文中的代码片段已经有举例了。在这里,我要讲的是一些在Dao中使用sql时,需要注意的东西。我们拿一条普通的查询语句来解释:

@Query("select * from UserInfo where id in (:userIds)")
List<UserInfo> loadAllByIds(int[] userIds);

如代码所示。 首先,from 后面的表名所代表的类,必须是一个Entity。然后,where 后面的条件字段,必须是该Entity里面的字段。最后,匹配的条件,必须与方法的参数名一致。

其它的详细使用,可以参考该博客:
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0525/7971.html

好了,到此为止,我们已经学会了Room的基本用法和如何定义Entity和Dao。

需要Demo的同学,可以在github上,下载这个项目,里面包含了一系列新知识点的使用Demo,我会不断的更新该库:
https://github.com/SuperBeagleDog/OkMVP.git

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android RoomAndroid架构组件的一部分,它是一个持久性库,提供了对SQLite数据库的抽象层,使得在使用SQLite的强大功能的同时,能够更加方便地访问数据库。Room具有以下优势: 1. 针对SQL查询的编译时验证:Room在编译时会检查SQL查询的语法和表结构,可以最大限度地减少错误和重复的代码。 2. 方便的注解:Room使用注解来定义实体类、DAO接口和数据库,可以简化数据库操作的代码编写。 3. 简化数据库迁移路径:Room提供了数据库迁移的支持,可以方便地升级数据库版本,而不需要手动编写复杂的SQL语句。 Room库由个主要组件组成: 1. 实体(Entity):实体是数据库中的表的映射类,使用注解来定义。每个实体类都应该有一个主键,并且可以定义索引、关联表等。 2. 数据访问对象(DAO):DAO是用于定义数据库操作的接口或抽象类,使用注解来标记。通过DAO可以定义插入、更新、删除等操作,并且可以使用SQL查询语句。 3. 数据库(Database):数据库是Room的核心组件,通过注解来定义。数据库类应该是抽象类,并且继承自RoomDatabase。在数据库类中可以定义实体类和DAO接口的关联关系,并且提供数据库的版本号和迁移策略。 以上是关于Android Room的基本介绍和组成部分的说明。通过使用Room,开发者可以更加方便地进行数据库操作,并且减少了编写重复和容易出错的代码的工作量。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [AndroidRoom的基本使用](https://blog.csdn.net/qq_42326415/article/details/119608921)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android Room 使用详解](https://blog.csdn.net/Snow_Ice_Yang/article/details/128929138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android Room的使用详解](https://blog.csdn.net/fjnu_se/article/details/128173203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值