一、前言

关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储和文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 SQLite 数据库,但是使用起来比较繁琐和复杂,所以 Android 又推出了 Room 持久性库,Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。但是我们今天不讲 Room 这个组件(以后讲 Jetpack 组件的时候再讲),我们今天来讲一个开源的安卓 ORM 框架———greenDAO。

二、greenDAO 概述

greenDAO 是适用于 Android 的轻量级快速 ORM 框架,可将对象映射到 SQLite 数据库中。 并且针对 Android 进行了高度的优化,greenDAO 提供了出色的性能,并占用了最少的内存,优点如下:性能上(可能是 Android 上最快的 ORM 框架);

易用性上(提供强大并且简洁明了的 API);

轻量(最小的内存消耗与小于 150KB 的库大小)。

三、ORM 框架概述

所谓 ORM 框架,即 Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体操作数据库的时候,就不需要再去和复杂的 SQL 语句打交道,只是像平时操作对象一样操作它就可以了。

四、项目案例演示

案例具体效果如下所示:

这个案例就是利用 greenDAO 对商品进行增删改查。

点击插入数据,就会把所有的数据保存到数据库中,点击查询所有数据,会将数据库中的所有数据查询出来,并显示在界面上,同时也可以根据条件进行查询,当点击查询零食类时,只会将零食查询出来显示在桌面上,点击单个商品,会跳转到商品详情页,在商品详情页可以对商品的描述进行修改,同时也可以删除商品。

商品的列表显示是用 RecyclerView 进行实现的。

五、greenDAO 使用步骤

5.1、准备工作

5.1.1、引入 greenDAO

greenDAO 的引入非常简单,我们只要按照 github 文档 上去做就可以了,具体如下所示:

5.1.2、创建实体类@Entity

public class GoodsModel implements Parcelable {

@Id(autoincrement = true)

private Long id;

@Index(unique = true)

private Integer goodsId;

private String name;

private String icon;

private String info;

private String type;

其中 @Entity 是 greenDAO 的实体注解(用于标识当前实体需要 GreenDao 生成代码)。

@Id 是主键 id,Long 类型,可以通过 @Id(autoincrement = true) 设置自动增长(自动增长主键不能用基本类型 long,只能用包装类型 Long)。

@Index(unique = true) 是向数据库添加了唯一约束。

5.1.3、自动生成实体类代码

写完上面实体类代码之后,接下来实体类代码的生成就交给 Android Studio 编译器就可以了,首先我们点击菜单栏中 Build 然后点击 Make Project,等待编译器编译完就可以了,编译完后实体类代码如下所示:(这里实现了 Parcelable 接口是为了在 Activity 之间传递实体类,实现接口的方法一直 Alt + Enter 就可以了)@Entity

public class GoodsModel implements Parcelable {

@Id(autoincrement = true)

private Long id;

@Index(unique = true)

private Integer goodsId;

private String name;

private String icon;

private String info;

private String type;

protected GoodsModel(Parcel in) {

if (in.readByte() == 0) {

id = null;

} else {

id = in.readLong();

}

if (in.readByte() == 0) {

goodsId = null;

} else {

goodsId = in.readInt();

}

name = in.readString();

icon = in.readString();

info = in.readString();

type = in.readString();

}

@Generated(hash = 1834473137)

public GoodsModel(Long id, Integer goodsId, String name, String icon,

String info, String type) {

this.id = id;

this.goodsId = goodsId;

this.name = name;

this.icon = icon;

this.info = info;

this.type = type;

}

@Generated(hash = 971639536)

public GoodsModel() {

}

public static final Creator CREATOR = new Creator() {

@Override

public GoodsModel createFromParcel(Parcel in) {

return new GoodsModel(in);

}

@Override

public GoodsModel[] newArray(int size) {

return new GoodsModel[size];

}

};

@Override

public int describeContents() {

return 0;

}

@Override

public void writeToParcel(Parcel dest, int flags) {

if (id == null) {

dest.writeByte((byte) 0);

} else {

dest.writeByte((byte) 1);

dest.writeLong(id);

}

if (goodsId == null) {

dest.writeByte((byte) 0);

} else {

dest.writeByte((byte) 1);

dest.writeInt(goodsId);

}

dest.writeString(name);

dest.writeString(icon);

dest.writeString(info);

dest.writeString(type);

}

public Long getId() {

return this.id;

}

public void setId(Long id) {

this.id = id;

}

public Integer getGoodsId() {

return this.goodsId;

}

public void setGoodsId(Integer goodsId) {

this.goodsId = goodsId;

}

public String getName() {

return this.name;

}

public void setName(String name) {

this.name = name;

}

public String getIcon() {

return this.icon;

}

public void setIcon(String icon) {

this.icon = icon;

}

public String getInfo() {

return this.info;

}

public void setInfo(String info) {

this.info = info;

}

public String getType() {

return this.type;

}

public void setType(String type) {

this.type = type;

}

}

点击编译后,编译器不仅会为我们自动完成实体类代码的生成,还会在 build 目录下生成三个文件 DaoMaster,DaoSession,XXXDao。利用这三个文件我们就可以操作数据库了,如下所示:

5.1.4、初始化 greenDAO

我这里是在 Application 里面初始化(注意要在清单文件里面引用,否则 Application 不生效),并提供一个getDaoSession() 的方法供外部使用,具体代码如下:public class MyApplication extends Application {

public static DaoSession mSession;

@Override

public void onCreate() {

super.onCreate();

initDb();

}

/**

* 连接数据库并创建会话

*/

public void initDb() {

// 1、获取需要连接的数据库

DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "test.db");

SQLiteDatabase db = devOpenHelper.getWritableDatabase();

// 2、创建数据库连接

DaoMaster daoMaster = new DaoMaster(db);

// 3、创建数据库会话

mSession = daoMaster.newSession();

}

// 供外接使用

public DaoSession getDaoSession() {

return mSession;

}

}

5.2、具体使用(增删改查)

准备工作做完之后,使用起来就非常简单了,只需要调用 greenDAO 的 API 就可以了。要想操作数据库,我们首先要获取 DAO 实例,我们创建一个 GreenDaoManager 类来专门管理数据库的操作,具体代码如下所示:public class GreenDaoManager {

private Context mContext;

private GoodsModelDao mGoodsModelDao;

public GreenDaoManager (Context context) {

this.mContext = context;

// 获取DAO实例

mGoodsModelDao = MyApplication.getDaoSession().getGoodsModelDao();

}

}

5.2.1、新增数据// 添加一个实体

DAO.insert(T entity);

// 添加多个实体

DAO.insertInTx(T... entities);

...// 插入数据

public void insertGoods () {

String json = DataUtils.getJson("goods.json", mContext);

mGoodsModelDao.insertOrReplaceInTx(DataUtils.getGoodsModels(json));

}

5.2.2、查询数据

1)、查询所有DAO.loadAll();// 查询所有数据

public List queryGoods () {

return mGoodsModelDao.loadAll();

}

2)、根据主键查询DAO.load(Long key);

3)、利用 QueryBuilder 与 properties 设置查询条件// 查询水果的数据

public List queryFruits () {

QueryBuilder result = mGoodsModelDao.queryBuilder();

//借助Property属性类提供的筛选方法

result = result.where(GoodsModelDao.Properties.Type.eq("0")).orderAsc(GoodsModelDao.Properties.GoodsId);

return result.list();

}

5.2.3、更新数据DAO.update(T entity);

DAO.updateInTx(T... entities);

...// 修改指定商品的商品信息

public void updateGoodsInfo (GoodsModel model) {

mGoodsModelDao.update(model);

}

5.2.3、删除数据DAO.delete(T entity);

DAO.deleteAll();

DAO.deleteByKey(K key);

...// 删除指定商品

public void deleteGoodsInfo (GoodsModel model) {

mGoodsModelDao.deleteByKey(model.getId());

}

5.2.4、GreenDaoManager 完整代码public class GreenDaoManager {

private Context mContext;

private GoodsModelDao mGoodsModelDao;

public GreenDaoManager (Context context) {

this.mContext = context;

// 获取DAO实例

mGoodsModelDao = MyApplication.getDaoSession().getGoodsModelDao();

}

// 添加所有的数据到数据库

public void insertGoods () {

String json = DataUtils.getJson("goods.json", mContext);

// 如果不想因为重复添加数据而导致崩溃,可以使用insertOrReplaceInTx API

mGoodsModelDao.insertOrReplaceInTx(DataUtils.getGoodsModels(json));

}

// 查询所有的数据

public List queryGoods () {

return mGoodsModelDao.loadAll();

}

// 查询水果的数据

public List queryFruits () {

QueryBuilder result = mGoodsModelDao.queryBuilder();

//借助Property属性类提供的筛选方法

result = result.where(GoodsModelDao.Properties.Type.eq("0")).orderAsc(GoodsModelDao.Properties.GoodsId);

return result.list();

}

// 查询零食的数据

public List querySnacks () {

QueryBuilder result = mGoodsModelDao.queryBuilder();

// 借助Property属性类提供的筛选方法

result = result.where(GoodsModelDao.Properties.Type.eq("1")).orderAsc(GoodsModelDao.Properties.GoodsId);

return result.list();

}

// 修改指定商品的商品信息

public void updateGoodsInfo (GoodsModel model) {

mGoodsModelDao.update(model);

}

// 删除指定商品

public void deleteGoodsInfo (GoodsModel model) {

mGoodsModelDao.deleteByKey(model.getId());

}

}

六、小结

greenDAO 的使用步骤其实就三步创建实体类;

生成对应的 DaoMaster、DaoSession、Dao;

通过 Dao 对象完成增删改查

七、案例源码

案例源码已上传至 github,有需要的话可以去下载。

android 连接mysql orm_Android ORM框架 GreenDao 的使用详解相关推荐

  1. Android ORM框架 GreenDao 的使用详解

    一.前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储 和 文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 ...

  2. jdbc mysql select_java连接mysql数据库并使用jdbc进行查询详解

    public Connection getCon() { //数据库连接名称 String username="root"; //数据库连接密码 String password=& ...

  3. Android ORM框架GreenDao用法

    Android ORM框架GreenDao用法 0 简介 android 上的ORM框架主要有两个:ormlite 和 GreenDAO,本篇主要介绍GreenDao的用法,原因是GreenDAO的速 ...

  4. Android 连接Mysql数据库步骤(新手步骤)

    Android 连接Mysql数据库步骤 1.新建项目project 2.运行,显示helloworld 3.复制mysql-connector-java-5.1.48.jar,到libs文件夹 4. ...

  5. Android Binder框架实现之bindService详解

        Android Binder框架实现之bindService详解 Android Binder框架实现目录: Android Binder框架实现之Binder的设计思想 Android Bi ...

  6. Android Binder框架实现之Parcel详解之基本数据的读写

       Android Binder框架实现之Parcel详解之基本数据的读写 Android Binder框架实现目录: Android Binder框架实现之Binder的设计思想 Android ...

  7. MySQL批量入库的几种方式详解

    MySQL批量入库的几种方式详解 1. MySQL批量入库概述 2. Hutool封装jdbc方式 3. Jdbc直接或批量执行方式 4. MyBatis批量入库方式 5. MySQL批量入库总结 1 ...

  8. jdbc mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解

    JDBC是Java程序连接和访问各种数据库的API,它可以提供Java程序和各种数据库之间的连接服务,下面是爱站技术频道小编为大家带来的JDBC实现Mysql自动重连机制的方法详解. 日志:using ...

  9. mysql主从同步默认延迟_减少mysql主从数据同步延迟问题的详解

    基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素: 1. 网络延迟 2. master负载 3. slave负载 一般的做法是 ...

最新文章

  1. [笔记]C#基础入门(八)——C#标识符的命名规则
  2. 1月国内操作系统市场:Windows XP份额高达60.84%
  3. Chrome 浏览器跨域和安全访问问题 使用 chrome的命令行标记:disable-web-security 参数联调线上数据...
  4. python emoji 表情处理过滤
  5. MySql -- 数据结构
  6. 我们计划招收300名学员,免费攻读人工智能专业!
  7. Eclipse 集成gtk开发环境
  8. python __reduce__魔法方法_Python魔法方法指南
  9. python简单代码恶搞-一个可以套路别人的python小程序实例代码
  10. vs 2017 配置 boost 库
  11. matlab建立遗传算法,Matlab遗传算法(一)
  12. 移动app用户体验与性能优化
  13. csp php,CSP策略及绕过方法
  14. 如何正确使用短信验证码
  15. 休假管理系统的用况详情和用况表
  16. 成功搭建Selenium运行环境,能够使用Chrome浏览器打开任意网页
  17. 深度学习中的epochs、batch_size、iterations详解
  18. Java开发面试常见的技术问题整理
  19. 判断NSString是否含有某字符rangeOfString
  20. 【Unity Shader 描边效果_案例分享】

热门文章

  1. 28 多进程之数据交换Pipe
  2. Android在桌面上添加开关,多键开关 Andromax v1.1.7
  3. 盘启动盘_[装机]推荐唯二的两个开源免费的启动盘工具,轻松创建USB启动盘
  4. java用线程插入一张图片_JAVA中怎么用线程实现图片的切换?
  5. java触发full gc的几种情况概述
  6. Java -jar启动服务与Tomcat服务器上部署JAR之间的区别
  7. _mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':no such file or directory
  8. ubuntu05.04 linux2.6.10 内核安装
  9. node.js:fs.open 和 fs.write 读取文件和改写文件
  10. nofollow标签_网站nofollow标签的应用 - 最蜘蛛池博客