我正在使用类型转换器来处理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会影响不需要它的方法或我应该注意的任何其他方法吗?
答案 0 :(得分:0)
因为它是在documentation中写的:“TypeConverter被添加到元素的范围内,所以如果你把它放在一个类/接口上,那个类中的所有方法/字段都可以使用转换器。
如果你把它放在Dao上,Dao中的所有方法都可以使用它。
如果你把它放在Dao方法上,方法的所有参数都可以使用它。
如果你把它放在Dao方法参数上,那么只有那个字段才能使用它。“
将TypeConverter添加到您需要的最小范围 - 如果您只需要一个方法,则注释一个方法,或者如果它在几个方法中使用,则注释整个Dao类,或者 - 如果它被广泛使用,则在整个DB上。