AndroidRoom数据库使⽤@Relation注解进⾏多表查询-Kotlin
AndroidRoom数据库使⽤@Relation注解进⾏多表查询-Kotlin
前⾔
在开发中⽤到多表⼀起查询的时候,我以前都是使⽤这个⽅法()最近发现⾕歌原⽣room⾥竟然有个@Relation注解⽤来解决这个问题
的,⽤起来还相当⽅便,故在此记录⼀下。
参考链接
代码
假设⼀个需求,你有n个朋友,你有n种礼物,你给每个朋友都送了不⽌⼀种礼物,最后需要得到⼀个列表【朋友+得到的礼物】
创建两个数据表
第⼀个是朋友的表
@Entity(tableName="friend_table")
dataclassFriendInfo(
//唯⼀
@PrimaryKey(autoGenerate=true)
varfriendId:Int=0,
varfriendName:String=""
):Serializable
第⼀个是礼物的表
@Entity(tableName="gift_table")
dataclassGiftInfo(
//唯⼀
@PrimaryKey(autoGenerate=true)
vargiftId:Int=0,
vargiftName:String="",
vargiftLable:String=""
):Serializable
创建记录
再创建⼀个表来记录你送给朋友的礼物
@Entity(tableName="friend_gift_table",
primaryKeys=["friendId","giftId"],)
dataclassFriendGiftRelation(
varfriendId:Int=0,
vargiftId:Int=0,
):Serializable
创建读取合并实体类
最后你需要将这种关系⼀起读取出来放到⼀个实体⾥
dataclassFriendWithGiftList(
@Embedded
varfriendInfo:FriendInfo,
@Relation(parentColumn="friendId",//这个参数来⾃于FriendInfo的唯⼀Key
entityColumn="giftId",//这个参数来⾃于GiftInfo的唯⼀Key
entity=GiftInfo::class,
associateBy=Junction(FriendGiftRelation::class))
vargiftList:List
):Serializable
创建Dao
这是读取逻辑
@Query("SELECT*FROMfriend_table")
funqueryAllFriendWithGiftList():LiveData>
最后
当然,@Relation注解不是只能像上⾯例⼦那样使⽤,还有更多详细⽤法,请参考上⾯的参考链接
本文发布于:2022-11-23 20:32:27,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/7959.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |