## 本文說明
Jetpack是一款不錯的插件,最近在學習Room操作數據庫,特此記錄下它的一些基本使用。
## 第一步 導入依賴
在build.gradle中添加下面的依賴,然後重構下項目。
```
def room_version = "2.2.3"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"
implementation "androidx.room:room-rxjava2:$room_version"
implementation "androidx.room:room-guava:$room_version"
testImplementation "androidx.room:room-testing:$room_version"
implementation 'androidx.recyclerview:recyclerview:1.0.0'
```
## 第二步 添加一個實體
```
//註解
@Entity
public class User {
//主鍵自動生成
@PrimaryKey(autoGenerate = true)
public int id;
//列名信息
@ColumnInfo(name = "user_name")
public String userName;
@ColumnInfo(name = "password")
public String password;
public User(String userName, String password) {
this.userName = userName;
this.password = password;
}
}
```
## 第三步 添加接口
```
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAll();
@Insert
void insertAll(User... users);
@Query("DELETE FROM user")
void deleteAll();
}
```
## 第四步 添加數據庫接口
```
@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
```
## 第五步 添加組件
```
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ScrollView
android:id="@+id/scrollView3"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/guideline"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textView6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="24sp" />
</ScrollView>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.6" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CLEAR"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/button2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="INSERT"
app:layout_constraintBottom_toBottomOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button"
app:layout_constraintTop_toTopOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>
```
## 第六步 添加響應
在這一步,我們需要添加交互,修改MainActivity。
```
public class MainActivity extends AppCompatActivity {
//添加變量
AppDatabase appDatabase;
UserDao userDao;
Button buttonClear,buttonInsert;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
appDatabase = Room.databaseBuilder(this,
AppDatabase.class, "room_demo").allowMainThreadQueries().build();
userDao = appDatabase.userDao();
buttonClear = findViewById(R.id.button);
buttonInsert = findViewById(R.id.button2);
textView = findViewById(R.id.textView6);
update();
//爲添加按鈕設置響應
buttonInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
User user = new User("tom","123123");
User user2 = new User("jerry","123456");
userDao.insertAll(user,user2);
update();
}
});
//刪除所有按鈕
buttonClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userDao.deleteAll();
update();
}
});
}
//更新頁面
void update() {
List<User> list = userDao.getAll();
String text = "";
for(int i=0; i<list.size(); i++) {
User user = list.get(i);
text = text + "" + user.id + ",username=" +user.userName + "; password=" + user.password + "\n";
textView.setText(text);
}
if(text.equals("")) {
textView.setText("hahaha");
}
}
}
```
## The end
感覺和Spring的操作數據庫方式很類似,下面是結果。
!(結果展示)[/images/JetPackOfRoom01.gif]