/**
* Room官方文档:https://developer.android.google.cn/reference/androidx/room/package-summary
*
* 1,Room是谷歌官方的数据库框架,实质是在SQLiteOpenHelper基础上进行封装,使之更简单易用,减少程序员代码量
* 2,Room采用注解反射方式自动完成代码的,主要有三个注解:@Database创建数据库获取DAO类 @Entity 实体类创建表 @Dao对表的操作
* 3,数据库访问是耗时操作,不应该在UI线程中
*
* ##数据库三步:建库 建表 封装DAO(增删查改)
*/
// 1-建库
// file:AppDatabase.java
@Database(entities = {User.class},version = 1)//绑定实体类,并以此建表 --数据库3结构:库--表--项
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();//获取DAO类
}
//2-建表
//file:User.java
@Entity
public class User {
@PrimaryKey(autoGenerate = true) //主键 自增
private int uid;
private String name;
@ColumnInfo(name = "last_name") //自定义列名
private String lastName;
public User() {
}
public User(String name, String lastName) {
this.name = name;
this.lastName = lastName;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return name+" "+lastName;
}
}
//3-封装DAO 完成增删查改操作
//file:UserDao.java
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
//SELECT * FROM
List<User> loadAll();
@Query("SELECT * FROM user WHERE uid IN (:userIds)")
//WHERE uid IN (:userIds) uid = :userID ...表示不定个数
List<User> loadAllByUserId(int... userIds);
@Query("SELECT * FROM user where name LIKE :first AND last_name LIKE :last LIMIT 1")
//WHERE...AND.. name LIKE :first
User loadOneByNameAndLastName(String first, String last);
@Insert
void insertAll(User... users);
@Update
void update(User oldUser,User newUser);
@Delete
void delete(User user);
}
//应用:获取Database对象 获取Dao对象
//file:RoomTestActivity.java
public class RoomTestActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_room_test);
AppDatabase mAppDatabase=Room.databaseBuilder(getApplication(), AppDatabase.class,"appdatabase.db").build();
UserDao mUserDao=mAppDatabase.userDao;
new Thread(new Runnable() {
@Override
public void run() {
mUserDao.insertAll(new User("dsada", "oooo"));
User user = mUserDao.loadAll().get(0);
Log.d("===========", user.toString());
}
}).start();
}
}