赞
踩
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments += [
"room.schemaLocation":"$projectDir/schemas".toString(),
"room.incremental":"true",
"room.expandProjection":"true"]
}
}
}
dependencies {
def room_version = "2.4.2"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
}
@Entity 注解必须加
这个注释将类标记为数据库行。对于每个实体,将创建一个数据库表来保存项目。Entity类必须在database# entities数组中被引用。实体(及其超类)的每个字段都持久化在数据库中,除非另有说明(详见实体文档)。
@PrimaryKey 主键,autoGenerate 指明是否自增长;@ColumnInfo 列的信息,有名称 、数据类型等等
import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; @Entity public class Song { @PrimaryKey(autoGenerate = true) private int id; private String name; @ColumnInfo(name = "release_year") private int releaseYear; public Song(String name, int releaseYear) { this.name = name; this.releaseYear = releaseYear; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getReleaseYear() { return releaseYear; } public void setReleaseYear(int releaseYear) { this.releaseYear = releaseYear; } }
增删改查语句,也是采用注解方式,同样@Dao一定不可少
import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import java.util.List; @Dao public interface SongDao { @Query("SELECT * FROM song") List<Song> loadAll(); @Query("SELECT * FROM song WHERE id IN (:songIds)") List<Song> loadAllBySongId(int... songIds); @Query("SELECT * FROM song WHERE name LIKE :name AND release_year = :year LIMIT 1") Song loadOneByNameAndReleaseYear(String name, int year); @Insert void insertAll(Song... songs); @Insert void insert(Song song); @Delete void delete(Song song); }
@Database(entities = {Song.class}, version = 1) ,指明注解entitie和版本
import androidx.room.Database;
import androidx.room.RoomDatabase;
@Database(entities = {Song.class}, version = 1)
public abstract class MusicDatabase extends RoomDatabase {
public abstract SongDao songDao();
}
最后使用:
import android.os.Bundle; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; import androidx.room.Room; import com.deviser.room.db.MusicDatabase; import com.deviser.room.db.Song; import java.util.List; public class MainActivity extends AppCompatActivity { MusicDatabase mDB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDB = Room.databaseBuilder(getApplicationContext(), MusicDatabase.class, "xx-db").build(); findViewById(R.id.insert).setOnClickListener(v -> { new Thread(() -> { Song s1 = new Song("潇洒走一回", 1991); mDB.songDao().insert(s1); }).start(); }); findViewById(R.id.search).setOnClickListener(v -> { new Thread(() -> { List<Song> list = mDB.songDao().loadAll(); for (Song s : list) { Log.i("TAG", "当前项在库中的id:" + s.getId() + ",歌曲名:" + s.getName() + ",发行年代:" + s.getReleaseYear()); } }).start(); }); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。