ROOM数据库简单封装及使用

第一步
导入依赖

implementation "androidx.room:room-runtime:2.2.5"
annotationProcessor "androidx.room:room-compiler:2.2.5"

第二步
创建bean类加上@Entity注解

package com.wei.mvvm2.entity;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

/**
 * @author: wangluming
 * @date: On 2020/10/1
 */
@Entity(tableName = "tb_finalce")
public class FinalceEntity {

    /**
     * id : 25
     * productname : 理财产品24
     * productdesc : 理财产品24
     * producttype : 1
     * yearrate : 0.09
     * totalamount : 1.0E7
     * saleamount : 0.0
     * labels :
     * lockdays : 14
     * minbugamount : 1000.0
     * isnew : 2
     * startlevel : 4.0
     */
    @PrimaryKey(autoGenerate = true)
    public int uid;
    @ColumnInfo
    private int id;
    @ColumnInfo
    private String productname;
    @ColumnInfo
    private String productdesc;
    @ColumnInfo
    private int producttype;
    @ColumnInfo
    private double yearrate;
    @ColumnInfo
    private double totalamount;
    @ColumnInfo
    private double saleamount;
    @ColumnInfo
    private String labels;
    @ColumnInfo
    private int lockdays;
    @ColumnInfo
    private double minbugamount;
    @ColumnInfo
    private int isnew;
    @ColumnInfo
    private double startlevel;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getProductname() {
        return productname;
    }

    public void setProductname(String productname) {
        this.productname = productname;
    }

    public String getProductdesc() {
        return productdesc;
    }

    public void setProductdesc(String productdesc) {
        this.productdesc = productdesc;
    }

    public int getProducttype() {
        return producttype;
    }

    public void setProducttype(int producttype) {
        this.producttype = producttype;
    }

    public double getYearrate() {
        return yearrate;
    }

    public void setYearrate(double yearrate) {
        this.yearrate = yearrate;
    }

    public double getTotalamount() {
        return totalamount;
    }

    public void setTotalamount(double totalamount) {
        this.totalamount = totalamount;
    }

    public double getSaleamount() {
        return saleamount;
    }

    public void setSaleamount(double saleamount) {
        this.saleamount = saleamount;
    }

    public String getLabels() {
        return labels;
    }

    public void setLabels(String labels) {
        this.labels = labels;
    }

    public int getLockdays() {
        return lockdays;
    }

    public void setLockdays(int lockdays) {
        this.lockdays = lockdays;
    }

    public double getMinbugamount() {
        return minbugamount;
    }

    public void setMinbugamount(double minbugamount) {
        this.minbugamount = minbugamount;
    }

    public int getIsnew() {
        return isnew;
    }

    public void setIsnew(int isnew) {
        this.isnew = isnew;
    }

    public double getStartlevel() {
        return startlevel;
    }

    public void setStartlevel(double startlevel) {
        this.startlevel = startlevel;
    }

    @Override
    public String toString() {
        return "FinalceEntity{" +
                "id=" + id +
                ", productname='" + productname + '\'' +
                ", productdesc='" + productdesc + '\'' +
                ", producttype=" + producttype +
                ", yearrate=" + yearrate +
                ", totalamount=" + totalamount +
                ", saleamount=" + saleamount +
                ", labels='" + labels + '\'' +
                ", lockdays=" + lockdays +
                ", minbugamount=" + minbugamount +
                ", isnew=" + isnew +
                ", startlevel=" + startlevel +
                '}';
    }
}

@Entity是该数据库表的注解可以指定表名tableName不指定表名则默认是该类的类名 @PrimaryKey是主键注解该注解有一个属性 autoGenerate(是否自增)默认是false 主键的字段访问修饰符为public 其他字段标注注解为 @ColumnInfo

第三步
创建DAO层(里面编写增删改查方法)

package com.wei.mvvm2.model.dao;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;

import com.wei.mvvm2.entity.FinalceEntity;

import java.util.List;

/**
 * @author: wangluming
 * @date: On 2020/10/13
 */
@Dao
public interface FinalcleDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertFinalce(List<FinalceEntity> entites);

    @Query("select * from tb_finalce where producttype = :type limit (:currentPage*:pagesize),:pagesize   ")
    List<FinalceEntity> getFinalce(int type, int currentPage, int pagesize);
}

该层加上@Dao注解修饰 提供增删改查接口 增加方法用@Insert修饰 里面属性onConflict = OnConflictStrategy.REPLACE为添加的数据相同的话则直接替换 @Query注解里面写查询的sql语句

第四步
数据库实例

package com.wei.mvvm2.model.database;

import androidx.room.Database;
import androidx.room.RoomDatabase;

import com.wei.mvvm2.entity.FinalceEntity;
import com.wei.mvvm2.model.dao.FinalcleDao;

/**
 * @author: wangluming
 * @date: On 2020/10/13
 */
@Database(entities = {FinalceEntity.class},version = 1)
public abstract class FinalceDataBase extends RoomDatabase {
    public abstract FinalcleDao finalcleDao();
}

该层为一个抽象类 继承RoomDatabase 用@Database注解修饰 entities属性为表的class文件 他是一个容器里面可以添加多个表的.class文件 必须加上version属性 里面加上FinalcleDao 的抽象方法

第五步
用单例简单封装ROOM数据库工具类

package com.wei.mvvm2.model.database;

import androidx.room.Room;

import com.wei.mvvm2.MyApplication;

/**
 * @author: wangluming
 * @date: On 2020/10/13
 */
public class FinalcelDBHelper {
    private static FinalcelDBHelper instance = new FinalcelDBHelper();
    private final FinalceDataBase finalcle;

    private FinalcelDBHelper(){
        finalcle = Room.databaseBuilder(MyApplication.getContext(), FinalceDataBase.class, "finalcle").build();

    }

    public static FinalcelDBHelper getInstance() {
        return instance;
    }
    public FinalceDataBase getDB(){
        return finalcle;
    }

    public void closeDB(){
        if (finalcle!=null&&finalcle.isOpen()){
            finalcle.close();
        }
    }

}

在构造方法中创建该数据库实例Room数据库提供的建造者方法databaseBuilder第一个参数为上下文第二个参数为该数据库实例的class文件 第三个参数为数据库名称 提供两个方法一个是获取数据库对象,关闭数据库方法


版权声明:本文为m0_46322939原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。