在Java中使用Room持久化,你需要遵循以下步驟:
build.gradle
文件中添加Room的依賴項。這包括Room的編譯器和適配器庫。dependencies {
def room_version = "2.4.2" // 使用最新的版本
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
// For Kotlin, use annotationProcessor instead of kapt
// annotationProcessor "androidx.room:room-compiler:$room_version"
}
注意:從Android Studio 4.1開始,你可以使用Kotlin的kapt
插件來替代Java的annotationProcessor
。如果你的項目是Kotlin,你應該使用kapt
。
2. 定義實體:創建一個Java類,該類將表示數據庫中的表。這個類應該使用@Entity
注解,并且所有的字段都應該有相應的getter和setter方法。如果某個字段不應該被直接訪問,你可以使用@ColumnInfo
注解來指定列名。
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "notes")
public class Note {
@PrimaryKey(autoGenerate = true)
private int id;
private String title;
private String content;
// Getters and setters...
}
@Dao
注解。例如,你可以定義一個用于插入、查詢、更新和刪除記錄的方法。import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
@Dao
public interface NoteDao {
@Insert
void insert(Note note);
@Query("SELECT * FROM notes")
List<Note> getAllNotes();
@Query("SELECT * FROM notes WHERE title LIKE :title")
List<Note> getNotesByTitle(String title);
@Update
void update(Note note);
@Delete
void delete(Note note);
}
RoomDatabase
。在這個類中,你可以使用@Database
注解來指定數據庫的名稱,并使用@TypeConverters
注解來注冊類型轉換器(如果需要的話)。然后,你可以使用Room.databaseBuilder
方法來構建數據庫實例。import androidx.room.Database;
import androidx.room.RoomDatabase;
@Database(entities = {Note.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract NoteDao noteDao();
// 如果需要的話,可以在這里注冊類型轉換器
// @TypeConverters({YourTypeConverter.class})
// public abstract YourTypeConverters yourTypeConverters();
}
AppDatabase
實例來執行所有的數據庫操作。例如,你可以在一個ViewModel或Repository類中創建一個AppDatabase
實例,并通過它來訪問NoteDao
。import androidx.lifecycle.ViewModel;
public class MainViewModel extends ViewModel {
private final AppDatabase appDatabase;
public MainViewModel(@NonNull Application application) {
super(application);
appDatabase = Room.databaseBuilder(application, AppDatabase.class, "my_database")
.fallbackToDestructiveMigration()
.build();
}
public void insertNote(Note note) {
appDatabase.noteDao().insert(note);
}
public List<Note> getAllNotes() {
return appDatabase.noteDao().getAllNotes();
}
// 其他方法...
}
注意:Room不會自動處理數據庫的升級。如果你更改了實體類或數據庫版本,你需要處理這些更改。你可以使用RoomDatabase.Callback
的onOpen
方法來執行一些升級邏輯,或者使用fallbackToDestructiveMigration()
方法來允許Room刪除舊數據并重新創建新數據庫。但是,請注意,這將導致所有現有數據丟失,因此你應該謹慎使用這種方法。