【问题标题】:Applying TypeConverters to Dao Android Room将 TypeConverters 应用到 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 会影响不需要它的方法的性能或我应该注意的其他任何事情吗?

【问题讨论】:

    标签: android dao android-room


    【解决方案1】:

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

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

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

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

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

    【讨论】:

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