網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Room的三個(gè)主要組件:
- 數(shù)據(jù)庫(kù)類(lèi),用于保存數(shù)據(jù)庫(kù)并作為應(yīng)用持久性數(shù)據(jù)底層連接的主要訪(fǎng)問(wèn)點(diǎn)。
- 數(shù)據(jù)實(shí)體,@Entity,表示數(shù)據(jù)庫(kù)中的表。
- 數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象 (DAO),@Dao,提供查詢(xún)、更新、插入和刪除數(shù)據(jù)的方法。
build.gradle添加
dependencies {
? ? def room_version = "2.4.3"? ? implementation "android.arch.persistence.room:runtime:$room_version"
? ? annotationProcessor "android.arch.persistence.room:compiler:$room_version"?? ? implementation "android.arch.persistence.room:rxjava2:$room_version"
? ? testImplementation "android.arch.persistence.room:testing:$room_version"
}
1. 創(chuàng)建實(shí)體類(lèi)User
@Entity(tableName = "users")
public class User {
@PrimaryKey
public int uid;
@ColumnInfo(name = "first_name")
public String firstName;
@ColumnInfo(name = "last_name")
public String lastName;
}
@Entity實(shí)體類(lèi),users表的名稱(chēng),不加默認(rèn)user
@ColumnInfo列名
@PrimaryKey主鍵
2. 創(chuàng)建DAO
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAll();
@Query("SELECT * FROM user WHERE uid IN (:userIds)")
List<User> loadAllByIds(int[] userIds);
@Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
"last_name LIKE :last LIMIT 1")
User findByName(String first, String last);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(User... users);
@Delete
void delete(User user);
}
增,刪,改:將實(shí)例與表的主鍵進(jìn)行匹配
查詢(xún)結(jié)果將自動(dòng)映射到對(duì)應(yīng)類(lèi)型的字段,若未映射將報(bào)警告
3. 數(shù)據(jù)庫(kù)
抽象類(lèi)AppDatabase 定義數(shù)據(jù)庫(kù)配置,并作為應(yīng)用對(duì)持久性數(shù)據(jù)的主要訪(fǎng)問(wèn)點(diǎn),擴(kuò)展了RommDataBase
@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class AppDataBase extends RoomDatabase {
public abstract UserDao userDao();
}
4. 使用
AppDataBase db = Room.databaseBuilder(getApplicationContext(),
AppDataBase.class, "database-name").build();
for (int i = 0; i < 10; i++) {
User user = new User();
user.uid = i;
user.firstName = "Shell" + i;
user.lastName = "Hub" + i;
db.userDao().insertAll( user);
List<User> userList = db.userDao().getAll();
for(User user1 : userList) {
Log.d("mip",""+user1.firstName);
}
}
為了節(jié)約獲取數(shù)據(jù)庫(kù)的時(shí)間和資源,采取單例模式
簡(jiǎn)單實(shí)現(xiàn):
public class Utils {
private static AppDataBase db = null;
private static Context context = null;
public static AppDataBase getDb(){
if( db == null) {
db = Room.databaseBuilder(context,
AppDataBase.class, "database-name").build();
}
return db;
}
public static void setContext(Context context){
Utils.context = context;
}
}
調(diào)用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Utils.setContext(getApplicationContext());
new Thread(new Runnable() {
@Override
public void run() {
AppDataBase db = Utils.getDb();
for (int i = 0; i < 10; i++) {
User user = new User();
user.uid = i;
user.firstName = "Shell" + i;
user.lastName = "Hub" + i;
db.userDao().insertAll( user);
List<User> userList = db.userDao().getAll();
for(User user1 : userList) {
Log.d("mip",""+user1.firstName);
}
}
}
}).start();
}
}
路過(guò)的大佬們有更好的單例實(shí)現(xiàn)請(qǐng)告訴我一下,
原文鏈接:https://blog.csdn.net/weixin_45369680/article/details/127866214
相關(guān)推薦
- 2023-02-25 從迷你todo?命令行入門(mén)Rust示例詳解_Rust語(yǔ)言
- 2022-09-26 docker已啟動(dòng)容器修改添加端口映射的兩種方法_docker
- 2023-03-02 Go語(yǔ)言讀取文本文件的三種方式總結(jié)_Golang
- 2022-01-16 1.把字符串轉(zhuǎn)化為時(shí)間戳,再將時(shí)間戳轉(zhuǎn)化為Date對(duì)象 /** *@parame time = 2
- 2022-11-10 react-native?父函數(shù)組件調(diào)用類(lèi)子組件的方法(實(shí)例詳解)_React
- 2023-07-25 使用SpringBoot+JWT+MybatisPlus實(shí)現(xiàn)簡(jiǎn)單的登陸狀態(tài)驗(yàn)證
- 2022-10-04 go常用指令之go?mod詳解_Golang
- 2022-09-05 詳解apache編譯安裝httpd-2.4.54及三種風(fēng)格的init程序特點(diǎn)和區(qū)別_Linux
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支