将TypeConverters应用于Dao Android Room

3

我正在使用类型转换器来处理Room数据库中的日期对象。我想知道在整个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个回答

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

如果您将其放在Dao上,则Dao中的所有方法都将能够使用它。

如果您将其放在Dao方法上,则该方法的所有参数都将能够使用它。

如果您将其放在Dao方法参数上,则只有该字段将能够使用它。"

将TypeConverter添加到最小范围 - 如果仅在一个方法中需要,请注释一个方法;如果在几个方法中使用,请在整个Dao类上注释;如果广泛使用,请在整个数据库上注释。


谢谢您的回答,但我已经阅读了文档。我想知道在性能方面是否会有任何影响。 - Luke Scales
@LukeScales,你对性能点的研究有什么发现?可以分享一下吗? - Usman Rana
@usman,恐怕我没有发现任何相关信息,无法在网上找到任何相关信息(文档中也没有提到性能),而且我也没有准备进行任何实验。看起来没有明显的区别,所以当多个方法使用TypeConverter时,我选择注释整个Dao。 - Luke Scales

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接