如何在安卓X使用注解数据库
第一步,添加依赖
implementation "androidx.room:room-runtime:2.2.4"
annotationProcessor"androidx.room:room-compiler:2.2.4"
第二步,写一个pojo(我也不知道这个能不能叫pojo)做表
1.类用@Entity修饰,里面写上tablename,对,一个Entity类就是一张表(目前看来是这样)
2.成员变量就是一个个列,写不写gettersetter无所谓,随便你,只要你能引用的到就行
3.主键是@PrimaryKey修饰,还可以这样写
@PrimaryKey(autoGenerate = true)
这是自增
4.只要用@Entity修饰的类,就可以是一个表,其他什么都没有都可以(只不过是空表),还有,里面写什么都行,所以想掌握表的写法,只要会写bean,domain,pojo就行了,外面加个@Entity
package com.iallchain.myphoneglasses.DB;
import androidx.annotation.NonNull;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "userinfo")
public class UserInfo {
@PrimaryKey
@NonNull
public String uuid;
public String name;
public UserInfo() {}public UserInfo(String uuid, String name) {
this.uuid = uuid;
this.name = name;
}@NonNull
@Override
public String toString() {
return "UserInfouuid:" + uuid + "name:" + name;
}
}
第三布、写dao
1.dao一定是interface,里面的方法加上增删改查的注解就可以了,至于怎么用这个dao去搜东西,插入东西,后面会提到
2.和@Entity创建表一样,只要在interface上加@dao就可以了,至于增删改查的操作,传入的数据写在方法括号里(参数)里,返回的数据用类接受,他会自动填充,高级一点的,有些多表查询出来的奇形怪状的数据,自己想个办法创建一个@Entity修饰的类,对,很麻烦。
【如何在安卓X使用注解数据库】3.如果想实现复杂的功能,一定要会sql语句,这也不难其实
package com.iallchain.myphoneglasses.DB.Dao;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
import com.iallchain.myphoneglasses.DB.UserInfo;
import java.util.List;
@Dao
public interface UserDao {
@Insert
void addAUser(UserInfo ui);
@Delete
void removeAUser(UserInfo ui);
@Update
void updateAUser(UserInfo ui);
@Query("select * from userinfo where uuid=:id")
UserInfo queryAUser(String id);
@Query("select * from userinfo")
List queryUser();
}
第四步、写数据库
1.数据库是一个抽象类,继承自RoomDatabase
2.注解@Database也要有,@Database里面写上@Entity注解的类的class,就会生成对应的表,其他参数一个是版本号,另一个不知道是啥直译是“出口模式”(exportSchema)
3.一定要有的,就是那个抽象的方法,通过这个方法可以获得dao,有几个dao类,就写几个方法
4.为了方便得到这个数据库实例和dao的引用,我写了“为了方便”之间的内容
BugApp.getContext()
获得的是context,这里你随便从哪里找来一个context都行
allowMainThreadQueries
是为了允许在主线程操作数据库
package com.iallchain.myphoneglasses.DB;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import com.iallchain.myphoneglasses.DB.Dao.UserDao;
import com.rulerbug.firstlibrary_x.Utils.BugApp;
@Database(entities = {UserInfo.class}, version = 1, exportSchema = false)
public abstract class UserDatabases extends RoomDatabase {//必要的开始
public abstract UserDao UserDao();
//必要的结束//为了方便开始
public static UserDatabases db;
public static UserDatabases getInstance() {
synchronized (UserDatabases.class) {
if (db == null) {
synchronized (UserInfo.class) {
db = Room.databaseBuilder(BugApp.getContext(), UserDatabases.class, "userDB").allowMainThreadQueries().build();
}
}
}
return db;
}public static UserDao getUserDao() {
return getInstance().UserDao();
}
//为了方便结束
}
推荐阅读
- 任时光绽放成六月繁花
- 我从来不做坏事
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 樱花雨
- 如何寻找情感问答App的分析切入点
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 人如果没梦想,和咸鱼有什么区别(自媒体时代把握住就能咸鱼翻身)
- 如何在Mac中的文件选择框中打开系统隐藏文件夹