将 TypeConverters 应用到 Dao Android Room

Posted

技术标签:

【中文标题】将 TypeConverters 应用到 Dao Android Room【英文标题】:Applying TypeConverters to Dao Android Room 【发布时间】:2018-09-09 16:01:18 【问题描述】:

我正在使用类型转换器来处理我的 Room 数据库中的 Date 对象。我想知道像这样使用类型转换器注释整个 Dao 是否有任何区别:

//TypeConverter for all
@Dao
@TypeConverters(DateConverter.class)
public interface MealDao 
...

或者只注释需要类型转换器的方法,比如:

//This method needs TypeConverter
@TypeConverters(DateConverter.class)
@Query("SELECT * From Meal " +
        "WHERE Meal.mealTime > :dayStart " +
        "AND Meal.mealTime < :dayEnd")
List<Meal> findAllMealsByDay(Date dayStart, Date dayEnd);

//This method doesn't
@Query("SELECT Meal.mealType From Meal " +
        "WHERE Meal.id = :mealId ")
int retrieveMealType(long mealId);

等等?此 Dao 中的 8 个方法中有 4 个需要 TypeConverter。声明整个 Dao 会影响不需要它的方法的性能或我应该注意的其他任何事情吗?

【问题讨论】:

【参考方案1】:

正如documentation 中所写:“TypeConverter 被添加到元素的范围内,因此如果将其放在类/接口上,该类中的所有方法/字段都将能够使用转换器。

如果你把它放在一个Dao上,Dao中的所有方法都可以使用它。

如果你把它放在一个Dao方法上,该方法的所有参数都可以使用它。

如果你把它放在一个Dao方法参数上,那么只有那个字段可以使用它。”

将 TypeConverter 添加到您需要的最小范围 - 如果您只需要一个方法,则在其中注释一个方法,或者如果在几个方法中使用它,则在整个 Dao 类上,或者 - 如果它被广泛使用,则在整个 DB 上。

【讨论】:

感谢您的回答,但我已经阅读了文档,我想知道在性能方面是否会有任何影响 @LukeScales 到目前为止,您对性能点有何发现?可以分享一下吗 @usman 没有发现恐怕,我在网上找不到任何相关信息(文档没有提到性能),我不准备进行任何实验。没有明显区别,所以当多个方法使用 TypeConverter 时,我选择注释整个 Dao

以上是关于将 TypeConverters 应用到 Dao Android Room的主要内容,如果未能解决你的问题,请参考以下文章

将 Arraylist 从 Servlet 返回到 DAO,然后返回到 Servlet,然后返回到 Jsp

避免 Clojure 应用程序的 DAO 层中的全局状态

将遗留应用程序迁移到 Symfony2

在表单中显示 DAO 表

将ehcache添加到DAO类后Junit测试失败,无法在测试类中实例化DAO

DAO设计和数据结构