将TypeConverters应用于Dao Android Room

时间:2018-03-30 15:48:03

标签: android dao android-room

我正在使用类型转换器来处理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 个答案:

答案 0 :(得分:0)

因为它是在documentation中写的:“TypeConverter被添加到元素的范围内,所以如果你把它放在一个类/接口上,那个类中的所有方法/字段都可以使用转换器。

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

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

如果你把它放在Dao方法参数上,那么只有那个字段才能使用它。“

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