当前位置: 首页 > news >正文

Android 数据库之GreenDAO

GreenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不再需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化,最小的内存开销 、依赖体积小 同时还是支持 数据库加密。

greenDAO 官网地址:greenrobot.org/greendao/

greenDAO GitHub 源码地址:greenrobot/greenDAO
 

GreenDao 特征

    1、支持 protocol buffer(protobuf) 协议
    GreenDao 支持 protocol buffer(protobuf) 协议数据的直接存储,如果你通过 protobuf 协议与服务器交互,将不需要任何的映射
    2、代码生成
    greenDAO 会根据配置信息自动生成核心管理类以及 DAO 对象
    3、性能
    所有 ORM 数据库的,greenDAO 是最快的,greenDAO 不作性能方面任何妥协

核心类介绍
1、DaoMaster:

使用 greenDAO 的入口点。DaoMaster 负责管理数据库对象(SQLiteDatabase)和 DAO 类(对象),我们可以通过它内部类 OpenHelper 和 DevOpenHelper SQLiteOpenHelper 创建不同模式的 SQLite 数据库。
2、DaoSession :

管理指定模式下的所有 DAO 对象,DaoSession 提供了一些通用的持久性方法比如插入、负载、更新和删除实体。
3、XxxDAO :

对于每个实体类, greenDAO 都会生成一个与之对应 DAO 对象,如:User 实体,则会生成一个 UserDao 类
4、Entities:

可持久化对象。通常,实体对象代表一个数据库行,使用标准 Java 属性(如一个 POJO 或 JavaBean )

集成GreenDao

1、build.gradle(Module:app)中添加配置与依赖

(1)

apply plugin: 'org.greenrobot.greendao' //添加greendao apply plugin
android {**
}

(2)

android {**// greendao配置greendao {//数据库版本号,升级时修改schemaVersion 1//生成的DAO,DaoMaster和DaoSession的包路径。默认与表实体所在的包路径相同daoPackage 'com.chy.greendao'//生成源文件的路径。默认源文件目录是在build目录中的(build/generated/source/greendao)targetGenDir 'src/main/java'}}

(3)

//引入GreenDao数据库,存储数据
implementation 'org.greenrobot:greendao:3.3.0' // add library
//Gson依赖
implementation 'com.google.code.gson:gson:2.8.5'

2、build.gradle(Project:xxx)中添加配置

// 添加插件 更好支持GreenDao
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'

创建Myapplication类:

public class Myapplication extends Application {public static DaoSession daoSession;@Overridepublic void onCreate() {super.onCreate();initDb();}/*** 数据库初始化* */public void initDb () {
//        获取SQLiteOpenHelper对象devOpenHelperDaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "mydb.db");
//        获取SQLiteDatabaseSQLiteDatabase db = devOpenHelper.getWritableDatabase();
//        加密数据库(这句话无法运行)//Database database = devOpenHelper.getEncryptedWritableDb("12345");//DaoMaster daoMaster = new DaoMaster(database);
//        创建DaoMaster实例
//        DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的Dao类(而不是对象)。
//        它具有静态方法来创建表或将它们删除。
//        其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。DaoMaster daoMaster = new DaoMaster(db);
//        管理特定模式的所有可用Dao对象daoSession = daoMaster.newSession();}}

 在AndroidManifest.xml添加自定义的Myapplication

创建Entity

package com.chy.table;import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Generated;@Entity(nameInDb = "patrol_table")
public class PatrolTable {/*** 主键 Long型,可以通过@Id(autoincrement = true)设置自增长。* 通过这个注解标记的字段必须是Long,数据库中表示它就是主键,并且默认是自增的。*/@Id(autoincrement = true)private Long id;/*** Unique 属性给数据库的列添加了一个唯一性限制。注意,SQLite也会隐式地为它创建一个索引。* Property :属性指定数据库的字段名称。默认是驼峰转成大写的下划线隔开的名称,比如:UserAge 转成 USER_AGE*/// @Unique@Property(nameInDb = "patroler_massif")private String patrolerMassif;// 巡查地块@Property(nameInDb = "patroler_person")private String patrolerPerson;// 巡查人员@Property(nameInDb = "patroler_time")private String patrolerTime;// 巡查时间@Generated(hash = 2022133330)public PatrolTable(Long id, String patrolerMassif, String patrolerPerson,String patrolerTime) {this.id = id;this.patrolerMassif = patrolerMassif;this.patrolerPerson = patrolerPerson;this.patrolerTime = patrolerTime;}@Generated(hash = 824963258)public PatrolTable() {}public Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public String getPatrolerMassif() {return this.patrolerMassif;}public void setPatrolerMassif(String patrolerMassif) {this.patrolerMassif = patrolerMassif;}public String getPatrolerPerson() {return this.patrolerPerson;}public void setPatrolerPerson(String patrolerPerson) {this.patrolerPerson = patrolerPerson;}public String getPatrolerTime() {return this.patrolerTime;}public void setPatrolerTime(String patrolerTime) {this.patrolerTime = patrolerTime;}}

创建完entity,点击Make Project 如图所示:

如果配置正确,会在配置的包目录下自动会生成DaoMaster,DaoSession 和XXXDao 类 。

 

定义GreenDaoManager类:

/*** 自定义Manager* */
public class GreenDaoManager {private Context mContext;private PatrolTableDao mPatrolTableDao;// 构造函数private GreenDaoManager(Context context){mContext = context;mPatrolTableDao = Myapplication.daoSession.getPatrolTableDao();}/*** 单例* */private static GreenDaoManager INSTANCE;public static GreenDaoManager getInstance(Context context){if (INSTANCE == null){INSTANCE = new GreenDaoManager(context);}return INSTANCE;}//添加一条数据到数据库public long insertPatrolTable (PatrolTable patrolTable) {long flag = mPatrolTableDao.insertOrReplace(patrolTable);return flag;}// 批量插入数据public void insertPatrolTables(List<PatrolTable> patrolTableList){mPatrolTableDao.insertInTx(patrolTableList);}//查询所有public List<PatrolTable> queryPatrolTable(){QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder().orderAsc(PatrolTableDao.Properties.Id);return query.list();}//查询地块名称public List<PatrolTable> queryMassif(String massifName){QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder();query = query.where(PatrolTableDao.Properties.PatrolerMassif.eq(massifName)).orderAsc(PatrolTableDao.Properties.Id);;return query.list();}//查询巡查人员public List<PatrolTable> queryPerson(String personName){QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder();query = query.where(PatrolTableDao.Properties.PatrolerPerson.eq(personName)).orderAsc(PatrolTableDao.Properties.Id);return query.list();}//删除指定数据public void deletePatrolTable(PatrolTable patrolTable){mPatrolTableDao.delete(patrolTable);}//更新数据public void updatePatrolTable(PatrolTable patrolTable){mPatrolTableDao.update(patrolTable);}}

使用:

private void initDB(){GreenDaoManager instance = GreenDaoManager.getInstance(this);//创建数据PatrolTable patrolTable = new PatrolTable();patrolTable.setPatrolerPerson("张三");patrolTable.setPatrolerMassif("南湖公园");patrolTable.setPatrolerTime("2023-8-8 11:21");/** 添加数据 **/long flag = instance.insertPatrolTable(patrolTable);System.out.println(flag);/** 获取数据 **/List<PatrolTable> patrolTables = instance.queryMassif(patrolTable.getPatrolerMassif());Gson gson = new Gson();String json = gson.toJson(patrolTables);System.out.println("JSON"+json);/** 修改数据 **/PatrolTable updatePatrolTable = new PatrolTable();updatePatrolTable.setId(1l);updatePatrolTable.setPatrolerPerson("李四");updatePatrolTable.setPatrolerMassif("西湖公园");updatePatrolTable.setPatrolerTime("2023-8-10 11:21");instance.updatePatrolTable(updatePatrolTable);/*** 获取所有数据* */List<PatrolTable> allPatrolTables = instance.queryPatrolTable();Gson gson2 = new Gson();String json2 = gson2.toJson(allPatrolTables);System.out.println("JSON2"+json2);}

http://www.lryc.cn/news/115118.html

相关文章:

  • kotlin 编写一个简单的天气预报app(六)使用recyclerView显示forecast内容
  • jpa Page 1 of 0 containing UNKNOWN instances错误关于like问题的解决记录
  • Python实战之使用Python进行数据挖掘详解
  • scala 加载properties文件
  • 备战秋招012(20230808)
  • QT中定时器的使用
  • 【UE4】多人联机教程(重点笔记)
  • 【go】GIN参数重复绑定报错EOF问题
  • 关于MySQL中的binlog
  • 我维护电脑的方法
  • AP51656 电流采样降压恒流驱动IC RGB PWM深度调光 LED电源驱动
  • Python爬虫的解析(学习于b站尚硅谷)
  • python的virtualenv虚拟环境无法激活activate
  • uniapp中token操作:存储、获取、失效处理。
  • 乐鑫科技 2022 笔试面试题
  • 实现UDP可靠性传输
  • Zebec Protocol 将进军尼泊尔市场,通过 Zebec Card 推动地区金融平等
  • Qt--动态链接库的创建和使用
  • 设计模式十二:享元模式(Flyweight Pattern)
  • 【LeetCode】88. 合并两个有序数组 - 双指针
  • HarmonyOS应用开发的新机遇与挑战
  • Qt中qmake、构建、运行、清理的区别
  • 【设计模式——学习笔记】23种设计模式——观察者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)
  • 【奇葩瑞萨-004】RX系列单片机的GPIO初始化
  • 【Git】Git切换地址
  • elementUI点击当前行更改当前行状态(数据更新DOM不更新问题解决)
  • python爬取阿里巴巴商品页面数据api
  • angular-mat-select 多选 实现按选择顺序排序
  • 爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029
  • 微服务服务拆分和远程调用