room框架是google出品打orm框架,闻名已久,今日入门学习
1、先写数据实体类,这个实体对应数据库中的一张表
@Entity
public class User {
@PrimaryKey
private int uid;
@ColumnInfo(name = "first_name")
private String firstName;
@ColumnInfo(name = "last_name")
private String lastName;
public User(int uid, String firstName, String lastName) {
this.uid = uid;
this.firstName = firstName;
this.lastName = lastName;
}
public int getUid() {
return uid;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
// Getters and setters are ignored for brevity,
// but they're required for Room to work.
}
2、写数据表的接口类 UserDao用来定义数据库的各种行为
@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
void insertAll(User... users);
@Delete
void delete(User user);
}
3、编写数据库类 使用单例实现,核心代码其实只有一句。
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
private static AppDatabase INSTANCE;
private static final Object sLock = new Object();
public abstract UserDao userDao();
public static AppDatabase getInstance(Context context) {
synchronized (sLock) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user.db")
.build();
}
return INSTANCE;
}
}
}
4、在activity里实验,如下写了2个按钮,一个存入数据,另外一个查询,binggo
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.add).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
User user = new User(122, "aaa", "last");
AppDatabase.getInstance(MainActivity.this).userDao().insertAll(user);
}
}).start();
}
});
findViewById(R.id.query).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
List<User> ll = AppDatabase.getInstance(MainActivity.this).userDao().getAll();
int x = 10;
x++;
}
}).start();
}
});
}