greenDao的使用文档

介绍:

greenDAO 是一款轻量级的 Android ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化, 最小的内存开销 、依赖体积小。适合存储大量的数据。

轻量级数据库是指,一种用于存储和管理小型数据集的数据库系统。它们可以在普通的个人电脑上运行,而不需要强大的服务器设备。它们通常只需要很少的内存和存储空间,因此最适合小型应用。轻量级数据库的例子包括SQLite、MongoDB和Appache Cassandra。

集成的步骤:

在APP下的gradle中,

 implementation 'org.greenrobot:greendao:3.3.0'  // greendao

greendao{
    schemaVersion 1 //版本号

    targetGenDir 'src/main/java'   //greenDao实体类包文件夹

    daoPackage 'com.example.teleprompter.greenDao'  //输出dao的数据库操作实体类文件夹(相对路径 包名+自定义路径名称,包将创建于包名的直接路径下)

}

在集成的时候,我的项目级gradle是这样的:

在项目级别的gradle中,

classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'

发现在项目级的gradle和之前的格式不同。

plugins {
    id 'com.android.application' version '7.2.1' apply false
    id 'com.android.library' version '7.2.1' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

看官网后知道,是2022年1月的Gradle7.1.0版本做的更新导致的,buildscript闭包可以放在plugins闭包前面,最后我的项目级gradle是这样的:

创建实体类

然后通过在实体类上加注解来达到生成对应的数据模型。

例如:

@Entity
public class TelePromterBean {

    @Id(autoincrement = true)
    private Long id;

    @Property
    private int number;//页面数量

    @Property
    private String name;//页面名字

    @Property
    private int fontSize;//字号

//  get()/set()

}

1. @Entity:标记一个实体类,声明一个表,一个实体类只能定义一张表,可以添加如下参数:(1)nameInDb:表名(2)indexes:定义索引,可以跨越多个列(3)createInDb:是否创建表(4)schema:定义架构名称(5)active:定义实体类有效性,默认为true

2. @Id:定义一列主键,可以添加如下参数:(1)nameInDb:定义列名(2)autoincrement:定义是否自增(3)generatedId:如果主键没有显示的赋值,则自动生成的

3. @Property:定义属性列,可以添加如下参数:(1)nameInDb:定义列名(2)not null:定义是否非空(3)unique:定义是否唯一(4)index:定义是否索引

4. @ToOne:定义一对一关系,可以添加如下参数:(1)nameInDb:定义列名(2)unique:定义是否唯一(3)not null:定义是否非空(4)index:定义是否索引

5. @ToMany:定义一对多关系,可以添加如下参数:(1)nameInDb:定义列名(2)unique:定义是否唯一(3)not null:定义是否非空(4)index:定义是否索引(5)orderBy:定义排序规则

实体类创建完成后,同步一下项目 然后就会生成如下:

增删改查


public class DBManger {
    private static final String TAG = "DBManger";

    private static final String dbName = "tele.db";

    private static DBManger mInstance;

    private final Context context;

    private DaoMaster.DevOpenHelper openHelper;
    public static DaoSession daoSession;

    public DBManger(Context context) {
        this.context = context;
        openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        Database db = openHelper.getWritableDb();
        daoSession = new DaoMaster(db).newSession();


    }

    //单例
    public static DBManger getInstance(Context context) {
        if (mInstance == null) {
            synchronized (DBManger.class) {
                if (mInstance == null) {
                    mInstance = new DBManger(context);
                }
            }
        }
        return mInstance;
    }

    //可读数据库
    private SQLiteDatabase getReadableDatabase() {
        if (openHelper == null) {
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        }
        SQLiteDatabase db = openHelper.getReadableDatabase();
        return db;
    }

    //可写数据库
    private SQLiteDatabase getWritableDatabase() {
        if (openHelper == null) {
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        }
        SQLiteDatabase db = openHelper.getWritableDatabase();
        return db;
    }

    //插入
    public void insert(TelePromterBean promterBean) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
        dao.insert(promterBean);
    }

    //插入数据集合
    public void insertUserList(List<TelePromterBean> promterBeanList) {
        if (promterBeanList == null || promterBeanList.isEmpty()) {
            return;
        }
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
        dao.insertInTx(promterBeanList);
    }

    //删除数据
    public void delete(TelePromterBean promterBean) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
        dao.delete(promterBean);
    }

    //更改
    public void update(TelePromterBean promterBean) {
        Log.d(TAG, "update: " + promterBean);
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
        dao.update(promterBean);
    }

    //查询
    public ArrayList<TelePromterBean> query() {
        DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        TelePromterBeanDao dao = daoSession.getTelePromterBeanDao();
        QueryBuilder<TelePromterBean> qb = dao.queryBuilder();
        ArrayList<TelePromterBean> list = (ArrayList<TelePromterBean>) qb.list();
//        for (int i = 0; i < list.size(); i++) {
//            list.get(i).setIsFlush(false);
//        }
        return list;
    }
}

在项目中使用:

TelePromterBean promterBean = new TelePromterBean(null, i, "", 20, "", false);

DBManger.getInstance(MainActivity.this).insert(promterBean);

DBManger.getInstance(MainActivity.this).delete(promterBean);

DBManger.getInstance(MainActivity.this).update(promterBean);

DBManger.getInstance(MainActivity.this).query();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值