在 dao room 数据库中创建一个带有 body 的自定义函数

Posted

技术标签:

【中文标题】在 dao room 数据库中创建一个带有 body 的自定义函数【英文标题】:create a custom function with body in dao room database 【发布时间】:2018-12-29 09:49:58 【问题描述】:

我想用这样的自定义函数创建一个 DAO 对象

@Dao
interface DataAccessObjDao
    @Insert
    fun insert(someEntity: SomeEntity)

    @Ignore
    fun sampleFun()
        insert(SumEntity())
    


但是编译器抱怨样本很有趣

类“DataAccessObjDao_Impl”必须声明为抽象或在“DataAccessObjDao”中实现抽象方法“sampleFun()”

【问题讨论】:

是的,它一定是,实际上它不是我原来的实现 【参考方案1】:

@Ignore 用于属性或实体,不能用于方法。 你可以通过扩展你的界面来做到这一点:

fun DataAccessObjDao.sampleFun()
    // irrelevant code

或添加@Transaction

@Transaction
fun sampleFun()
    firstDelete()
    thenInsert()

【讨论】:

【参考方案2】:

正如您所写,Dao 也可以是抽象类。您可以在抽象类中定义带有主体的方法。但是 Dao 是用于查询表的,并且对于不同的表有不同的 Dao 对象。如果他们只有插入、删除、更新和选择查询会更好。我也用 BaseDao 来最小化 Dao 代码。

您应该在使用 Repository 的 LocalDataSource 类中调用 dao.insert(SumEntity()),如 this guide。

【讨论】:

以上是关于在 dao room 数据库中创建一个带有 body 的自定义函数的主要内容,如果未能解决你的问题,请参考以下文章

在房间中创建表格的方法[重复]

可以在DAO中创建对象吗

在 PHP 中创建 DAO 的正确方法

如何在带有 Room 的 RawQuery 中使用联接?

如何在 PHP 中创建通用 DAO 接口?

如何在mysql中创建一个逆序变量