如何在安卓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 "UserInfo  uuid:" + uuid + "name:" + name;
    }
}

第三布、写dao

1.dao一定是interface,里面的方法加上增删改查的注解就可以了,至于怎么用这个dao去搜东西,插入东西,后面会提到

2.和@Entity创建表一样,只要在interface上加@dao就可以了,至于增删改查的操作,传入的数据写在方法括号里(参数)里,返回的数据用类接受,他会自动填充,高级一点的,有些多表查询出来的奇形怪状的数据,自己想个办法创建一个@Entity修饰的类,对,很麻烦。

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<UserInfo> 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();
    }
//    为了方便结束
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值