android room 简书,Android room 存储复杂数据类型

通常,我们用到数据库会有很多种,这里就不做讨论了,我们只来说说如何用room来存储一些复杂数据结构。

首先看此文章的都假设你已经看过了room的简单用法,如果没有看过,那你可能需要先去看看了。

假设,我们从后台返回一个数据类型是这样的:

public class News{

public long id;

public String title;

public String title;

public Listtags;

}

public class Tag{

public long id;

public String name;

}

这种数据类型就比较很常见了,当然了,你第一反应可能是: 这个哪里复杂了,嗯,说不复杂确实不复杂,说复杂呢,是因为用room的话,确实比较麻烦,说白了,就是如何用 room存储带有lis类型的数据。ok话不多说,我们直接上代码:

bean 的改造

@Entity(tableName = "news")

public class News{

@PrimaryKey(autoGenerate = true)

public long id;

public String title;

public String title;

@Ignore

public Listtags;

}

@Entity(tableName = "tags")

public class Tag{

@PrimaryKey(autoGenerate = true)

public long id;

public String name;

@ColumnInfo(name = "news_id")

public long newsid;

}

然后我们重新添加一个bean:NewsWithTags:

public class NewsWithTags{

@Embedded

public News news;

@Relation(parentColumn = "id",entityColumn = "news_id")

public List tags;

}

注意看这个bean,没有table注解@Embedded 注解的是news这个bean。

@Relation 中parentColumn对应的是news中的id,entityColumn对应的是tag中的news_id,这个值实际上就等于news中的id。

Dao

NewsWithTagDao:

@Dao

public interface NewsWithTaDao {

@Transaction

@Query("SELECT * FROM news")

List getAllNews();

}

其他没啥好说的,添加数据要先添加news,然后根据news 的id添加tag,删除数据,要先根据news的id删除tag表中的数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值