将 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