Android开发经验谈终端研发部android 开发程序员

Android Architecture Compone

2017-11-17  本文已影响480人  三十二蝉

前言

最近在项目中,使用了Google官方的ORM库Room。Room库Api设计类似Retrofit,非常简洁。在此记录其使用方法以及使用过程中碰到的一些问题。

Room使用介绍

gradle 依赖

Room在google的maven仓库,所以首先要添加Google的Maven仓库地址:

allprojects {
    repositories {
        jcenter()
        maven { url 'https://maven.google.com' }
    }
}

添加相关依赖项:

    compile "android.arch.persistence.room:runtime:1.0.0"
    apt "android.arch.persistence.room:compiler:1.0.0"

根据gradle选择使用apt或者annotationProcessor(apt需要添加 'android-apt'的gradle插件依赖)

ORM封装策略

Room的ORM可以分为如下三层:

ORM分层.png
可以看到,db这个包下可以分为三层。DownLoadDataBase 提供统一的对外接口,外部调用都通过这个类操作数据库。dao这个包,是数据库接口层(封装了增删改查的相关操作)。entity这个包,是数据库实体层(封装了数据库的表结构)。

ORM调用关系

@Entity(tableName = "serverdata")
public class ServerDataCache {
  @PrimaryKey
  @NonNull
  @ColumnInfo(name = "video_id")
  public String videoId; 
  @ColumnInfo(name = "server_json_data")
  public String serverJsonData;
  @ColumnInfo(name = "server_thumbnail_localpath")
  public String serverThumbnailLocalPath;
  @ColumnInfo(name = "is_valid")
  public boolean isValid = false; 
}

如上所示,上述代码定义了一张叫serverdata的表,有4个字段,主键是video_id。

@Dao
public interface ServerDataCacheDao {
  @Insert(onConflict = OnConflictStrategy.IGNORE)
  void insert(ServerDataCache serverData);
  @Update
  void update(ServerDataCache serverData);
  @Delete
  void delete(ServerDataCache serverData);
  @Query("SELECT * FROM serverdata WHERE video_id=:videoId AND is_valid=:isValid")
  ServerDataCache  getServerDataCacheByVideoId(String videoId, boolean isValid);
  @Query("SELECT * FROM serverdata WHERE video_id=:videoId")
  ServerDataCache  getServerDataCacheByVideoId(String videoId);
  @Query("SELECT * FROM serverdata WHERE is_valid=:isValid")
  List<ServerDataCache> getServerDataCacheByValidState(boolean isValid);

}
@Database(entities = {ServerDataCache.class}, version = 1, exportSchema = false)
public abstract class DownloadDataBase extends RoomDatabase {
  public abstract ServerDataCacheDao serverDataCacheDao();
}

Room相关注解的使用

@Insert(onConflict = OnConflictStrategy.IGNORE)
Name Meaning
Replace replace the old data and continue the transaction
Rollback rollback the transaction
Abort abort the transaction
Fail fail the transcation
Ignore ignore the conflict

Room使用过程中碰到的问题

上一篇 下一篇

猜你喜欢

热点阅读