Android Studio中Room数据库:单Dao还是多Dao处理四类数据表?
Room多表场景:单个Dao还是分表Dao?
在开发音视频播放器的Room数据库设计中,优先建议为每张数据表单独定义Dao接口,原因很实在:
- 职责划清,维护省心:每个Dao只管一张表的增删改查,不会出现一个文件里堆着四张表的所有操作逻辑。后期要改音频文件的查询逻辑,直接找对应Dao就行,不用在大堆代码里翻找。
- 贴合Room的设计思路:Room本身就鼓励实体类与Dao一一对应,每个Dao通过
@Dao注解绑定对应实体,方法上用@Insert、@Query等注解直接关联表操作,逻辑一目了然,新人接手也能快速看懂。 - 避免命名混乱:如果全塞一个Dao里,你得把方法命名成
insertAudioFile、deleteVideoFolder这种长名字;分开后每个Dao里直接用insert、delete,代码简洁清爽。 - 扩展性强:比如后续要给音频文件加个“按播放次数排序”的查询,直接在对应Dao里加个
@Query方法就行,完全不会影响其他表的代码。
当然,如果你的四张表只有最基础的增删改查,没什么特殊逻辑,硬用单个Dao也能跑,但从长期迭代来看,分表Dao的架构更抗造。
给你贴个极简示例参考:
// 音频文件专属Dao @Dao interface AudioFileDao { @Insert suspend fun insert(audioFile: AudioFile) @Query("SELECT * FROM audio_files ORDER BY play_count DESC") suspend fun getAudioFilesSortedByPlayCount(): List<AudioFile> } // 视频文件夹专属Dao @Dao interface VideoFolderDao { @Insert suspend fun insert(videoFolder: VideoFolder) @Delete suspend fun delete(videoFolder: VideoFolder) }
然后在Database类里统一暴露所有Dao:
@Database(entities = [AudioFile::class, VideoFile::class, AudioFolder::class, VideoFolder::class], version = 1) abstract class MediaPlayerDatabase : RoomDatabase() { abstract fun audioFileDao(): AudioFileDao abstract fun videoFileDao(): VideoFileDao abstract fun audioFolderDao(): AudioFolderDao abstract fun videoFolderDao(): VideoFolderDao }
内容的提问来源于stack exchange,提问作者Hanif Khan
相关产品推荐
相关产品推荐

