正文
今天我们来集成使用jetpack的room
Room: The Room persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.
这个是官网的描述,简而言之就是使用Room可以更好、更方便、更流畅地访问SQLite数据库
配置Gradle
dependencies {
...
// Room
implementation "androidx.room:room-runtime:2.1.0-alpha06"
annotationProcessor "androidx.room:room-compiler:2.1.0-alpha06"
}
我们在Gradle中进行如上配置,之后点击同步按钮,等待同步成功后我们就可以使用Room了
创建实体(Entity)
package com.yk.jchat.model.model;
import androidx.room.Embedded;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
private Integer id;
private String nickname;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
@Entity注解用来表示这个类是Room的一个实体
@PrimaryKey注解用来表示这个属性为主键(autoGenerate = true表示自增长,注意,每个实体类至少有一个主键)
创建DAO
package com.yk.jchat.model.dao;
import com.yk.jchat.model.model.User;
import java.util.List;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Update;
@Dao
public interface UserDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(User... users);
@Delete
void delete(User... users);
@Update(onConflict = OnConflictStrategy.REPLACE)
void update(User... users);
@Query("SELECT * FROM User WHERE id == :id")
User queryForId(int id);
@Query("SELECT * FROM User WHERE nickname == :nickname")
List<User> queryForNickname(String nickname);
@Query("SELECT * FROM User")
List<User> queryAll();
}
DAO是用来进行数据库操作的,我们只需要相应的方法前加上对应的注解即可,比如
- @Insert表示插入
- @Delete表示删除
- @Update表示更新
- @Query表示查询
你可以注意到了有的注解有这样一行语句onConflict = OnConflictStrategy.REPLACE,这个是处理事务冲突的策略,OnConflictStrategy.REPLACE表示用替代,更多策略可以查询官网,还有我们的查询方法可以根据自己的需求编写查询语句。
创建数据库
package com.yk.jchat.model.db;
import com.yk.jchat.model.dao.UserDao;
import com.yk.jchat.model.model.User;
import androidx.room.Database;
import androidx.room.RoomDatabase;
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
数据库AppDatabase是个抽象类,它里面新建一个抽象方法userDao(),到这一步我们就可以使用它了,我们先要获取AppDatabase的实例,通常是在Application或一个单例类中获取,因为每获取一次AppDatabase的实例是耗内存的,获取的方法是
AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "my_database").build();
获取之后我们就可以进行增删改查操作了,方法如下
db.userDao().insert(); //增
db.userDao().delete(); //删
db.userDao().update(); //改
db.userDao().queryAll(); //查
好了,Room就介绍到这里,希望大家喜欢。