## Android GreenDao数据库框架
GreenDao简介
- Android平台的对象关系映射工具(ORM)
- 为关系型数据库提供面向对象的接口
- 简化数据库操作
ORM框架
所谓ORM框架,即Object-Relational
Mapping,它的作用是在关系型数据库和对象之间做一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
GreenDao的优势
- 性能(可能是Android上最快的ORM)
- 易用性(强大的API,涵盖关系和链接)
- 轻量(最小的内存消耗与100KB的库大小)
GreenDao的核心概念
- 某实体类-------->某表
- 某DAO----------->数据访问对象(某表的操作)
- DaoMaster------>数据库连接对象
- DaoSession----->由连接生成的会话
GreenDao的使用步骤
- 创建实体类
- 生成对应的DaoMaster、DaoSession、Dao
- 通过Dao对象完成增删改查
数据库加密
compile 'net.zetetic:android-database-sqlcipher:3.5.9@aar'
devOpenHelper.getEncryptedWritableDb("<your-secret-password>");
下面通过一个实例来讲解GreenDao的使用
项目介绍:点击进货,创建数据库,同时添加了数据条目,点击全部,显示全部的数据内容,点击水果,则筛选出所有水果的数据,点击零食,则筛选出所有零食的数据,点击任何一条数据,则进入修改页面,可对描述信息进行修改,点击确认修改,则跳转回主页面,显示修改之后的数据,点击任何一条数据,再次进入修改页面,点击删除,则删除该条数据,主页面该条数据则已被删除
项目实现
1.添加GreenDao的依赖
- 添加GreeenDao的插件
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
- 添加library依赖
implementation 'org.greenrobot:greendao:3.3.0'
下面的这个是RecyclerView的依赖,在activity_main.xml页面有用到这个控件,所以在此处也添加一下这个依赖
implementation 'androidx.recyclerview:recyclerview:1.1.0'
- 添加apply plugin应用插件
apply plugin: 'org.greenrobot.greendao'
2.创建实体类GoodModel
①让GoodModel实现序列化接口
public class GoodModel implements Parcelable
②添加 @Entity
@Entity为实体注解
③添加 @Id(autoincrement = true)
@Id-- 主键 Long型,可以通过@Id(autoincrement = true)设置自增长。通过这个注解标记的字段必须是Long,数据库中表示它就是主键,并且默认是自增的。
④声明变量
private Long id;
private Integer goodsId;
private String name;
private String icon;
private String info;
private String type;
⑤编译项目
即点击菜单栏Build中的Make Project进行编译
编译结束后,项目自动生成一系列方法及生成对应的DaoMaster、DaoSession、Dao
GoodModel.java完整代码
import android.os.Parcel;
import android.os.Parcelable;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;
// implements Parcelable 实现序列化接口
@Entity
public class GoodModel implements Parcelable {
@Id(autoincrement = true)
private Long id;
private Integer goodsId;
private String name;
private String icon;
private String info;
private String type;
@Generated(hash = 2109828625)
public GoodModel(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 = 1633159192)
public GoodModel() {
}
protected GoodModel(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();
}
public static final Creator<GoodModel> CREATOR = new Creator<GoodModel>() {
@Override
public GoodModel createFromParcel(Parcel in) {
return new GoodModel(in);
}
@Override
public GoodModel[] newArray(int size) {
return new GoodModel[size];
}
};
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;
}
@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);
}
}
DaoMaster、DaoSession、Dao自动生成在如下目录中
3.创建数据库连接类MyApplication
①MyApplication继承Application
public class MyApplication extends Application
②创建方法initDb 连接数据库并创建会话
public void initDb(){
//1-获取需要连接的数据库
DaoMaster