前言
GreenDAO是一个对象关系映射(ORM Object RelationShop Mapping)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。
GreenDao 官网:http://greenrobot.org/greendao/
GreenDao 特征介绍:http://greenrobot.org/greendao/features/
GreenDao 学习文档:http://greenrobot.org/greendao/documentation/
GreenDao 更新日志:http://greenrobot.org/greendao/changelog/
GreenDao GitHub地址:https://github.com/greenrobot/greenDAO
GreenDao优点:
①性能高,号称Android最快的关系型数据库,存取速度快
②内存占用小
③库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
④支持数据库加密 greendao支持SQLCipher进行数据库加密
⑤激活实体,支持缓存,代码自动生成。
1.添加依赖
1.
在项目根目录的 build.gradle 添加
buildscript {
repositories {
jcenter()
mavenCentral() // *1. add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' //*2. add plugin
}
2.
在app的 build.gradle 添加
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' //*1.apply plugin
dependencies {
implementation 'org.greenrobot:greendao:3.3.0' // *2.add library
}
3.GreenDao 3 采用注解的方式来定义实体类,可按如下设置生成文件的目录,在app的 build.gradle 添加
greendao {
// 指定数据库schema版本号,迁移等操作会用到
schemaVersion 1
// 设置生成数据库文件的目录,默认是在build中,可以将生成的文件放到我们的java目录中
targetGenDir 'src/main/java'
// 设置生成的数据库相关文件的包名,默认为entity所在的包名
// 在这里 'yoho' 是数据库名 可以自行更改
daoPackage 'com.dgq.greendao.gen'
}
2.定义实体类
@Entity()
public class User {
//主键自增
@Id(autoincrement = true)
private Long u_id = null;
@NotNull
// 属性 自定义
private String u_name;
// A code block
然后 Make Project 就是锤子 锤一下
变化后的实例类是这样的
@Entity()
public class User {
@Id(autoincrement = true)
private Long u_id = null;
@NotNull
private String u_name;
@Generated(hash = 989383688)
public User(Long u_id, @NotNull String u_name) {
this.u_id = u_id;
this.u_name = u_name;
}
//这个是后来自己添加的 便于删除
public User(Long u_id) {
this.u_id = u_id;
}
@Generated(hash = 586692638)
public User() {
}
public Long getU_id() {
return this.u_id;
}
public void setU_id(Long u_id) {
this.u_id = u_id;
}
public String getU_name() {
return this.u_name;
}
public void setU_name(String u_name) {
this.u_name = u_name;
}
}
还会生成这三个类
不用操作他
3.封装数据库操作类
public class DBManager {
//数据库名 这里和添加依赖里的第3步 要一样
private final String Name = "dgq.db";
//表
private DaoSession mDaoSession;
//库
private DaoMaster mDaoMaster;
private Context mContext;
//初始化,在Application
public void init(Context context) {
this.mContext = context;
}
//单例
private static DBManager mDBManager;
public static DBManager getInstance() {
if (mDBManager == null) {
mDBManager = new DBManager();
}
return mDBManager;
}
//获取数据库DaoMaster
public DaoMaster getmDaoMaster() {
if (mDaoMaster == null) {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(mContext, Name);
mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
}
return mDaoMaster;
}
//获取数据库CRUD DaoSession
public DaoSession getmDaoSession() {
if (mDaoMaster == null) {
getmDaoMaster();
}
if (mDaoSession == null) {
mDaoSession = mDaoMaster.newSession();
}
return mDaoSession;
}
}
4.初始化
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
DBManager.getInstance().init(this);
}
}
记得在AndroidManifest.xml 也就是清单文件内注册
5.增删改查 调用数据库
增加
DBManager.getInstance().getmDaoSession().insert(new User(null, "老耀"));
删除
DBManager.getInstance().getmDaoSession().delete(new User((long) 1));
修改
DBManager.getInstance().getmDaoSession().update(new User((long) 1, "老欣"));
查找
List<User> users = DBManager.getInstance().getmDaoSession().loadAll(User.class);
LogUtils.json(users);
LogUtils用的是工具类 需要倒一个工具类依赖
好用!!!
//工具类
api 'com.blankj:utilcodex:1.26.0'