一、前言
在没有使用GreenDao之前,就听说过GreenDao的大名,GreenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。后来在项目中使用了GreenDao的解决方案,感觉很不错,下面将从GreenDao的简单使用和升级迁移来对GreenDao进行介绍和说明。
二、GreenDao的简单使用
2.1 GreenDao导入相应的包
compile
'org.greenrobot:greendao:3.0.1'
compile
'org.greenrobot:greendao-generator:3.0.0'
|
2.2 配置app的Gradle
apply
plugin
:
'org.greenrobot.greendao'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath
'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
}
greendao {
schemaVersion
1
daoPackage
'com.anye.greendao.gen'
targetGenDir
'src/main/java'
}
|
greendao参数说明:
schemaVersion指定了数据库版本号,在数据库升级时会用到
daoPackage通过Gradle插件生成的数据库相关文件的包名,默认情况下为entity所在的包名,这里设置的生成的文件路径com.anye.greendao.gen
targetGenDir 如果该参数没有指定会生成在build/generated的目录下,配置中指定的生成的工程的Java目录中。
2.3 数据库类表的编写
package
org.greenrobot.greendao.example;
/**
* Created by moxie on 2018/4/21.
*/
import
org.greenrobot.greendao.annotation.
Convert
;
import
org.greenrobot.greendao.annotation.
Entity
;
import
org.greenrobot.greendao.annotation.
Generated
;
import
org.greenrobot.greendao.annotation.
Id
;
import
org.greenrobot.greendao.annotation.
Index
;
import
org.greenrobot.greendao.annotation.
NotNull
;
import
java.util.Date;
@Entity
public class
DataItem {
@Id
private
Long
id
;
@NotNull
private
String
text
;
private
String
comment
;
private
java.util.Date
date
;
}
|
@Entity:将Java普通类变为一个能够被greenDAO识别的数据库类型的实体类
@Id:通过这个注解标记的字段必须是Long类型,表明这个字段在数据库中是作为主键,并且默认它是自增长的。
对工程文件进行编译之后数据库类的会自动添加很多代码,参见如下:
package
org.greenrobot.greendao.example;
/**
* Created by moxie on 2018/4/21.
*/
import
org.greenrobot.greendao.annotation.
Convert
;
import
org.greenrobot.greendao.annotation.
Entity
;
import
org.greenrobot.greendao.annotation.
Generated
;
import
org.greenrobot.greendao.annotation.
Id
;
import
org.greenrobot.greendao.annotation.
Index
;
import
org.greenrobot.greendao.annotation.
NotNull
;
import
java.util.Date;
@Entity
public class
DataItem {
@Id
private
Long
id
;
@NotNull
private
String
text
;
private
String
comment
;
private
java.util.Date
date
;
@Generated
(hash =
1798537172
)
public
DataItem(Long id,
@NotNull
String text, String comment,
java.util.Date date) {
this
.
id
= id;
this
.
text
= text;
this
.
comment
= comment;
this
.
date
= date;
}
@Generated
(hash =
1750509646
)
public
DataItem() {
}
public
Long getId() {
return this
.
id
;
}
public void
setId(Long id) {
this
.
id
= id;
}
public
String getText() {
return this
.
text
;
}
public void
setText(String text) {
this
.
text
= text;
}
public
String getComment() {
return this
.
comment
;
}
public void
setComment(String comment) {
this
.
comment
= comment;
}
public
java.util.Date getDate() {
return this
.
date
;
}
public void
setDate(java.util.Date date) {
this
.
date
= date;
}
}
|
2.4 数据库使用前的初始化
DaoMaster.DevOpenHelper devOpenHelper =
new
DaoMaster
.DevOpenHelper(MyApplication.getContext(),
"my-db"
,
null
);
DaoMaster daoMaster =
new
DaoMaster
(devOpenHelper.getWritableDatabase());
DaoSession daoSession = daoMaster.
new
Session
();
DataItemDao dataItemDao = daoSession.getDataItemDao();
|
2.5数据库的操作
增加
Date
date
=
new
Date
();
DataItem dataItem =
new
DataItem(
1
,
"zhangsan"
,
"good student"
,
data
);
dataItemDao.insert(dataItem);
|
删除
DataItem dataItem = dataItemDao.queryBuilder().
where
(DataItemDao.Properties.Text.eq(
"zhangsan"
)).build().
unique
();
if
(dataItem !=
null
){
dataItemDao.deleteByKey(dataItem.getId());
}
|
修改
DataItem dataItem = dataItemDao.queryBuilder()
.
where
(DataItemDaoDataItemDao.Properties.Id.ge(
10
), DataItemDao.Properties.Text.like(
"%90%"
)).build().
unique
();
if
(user ==
null
) {
Toast.makeText(MainActivity.this,
"
用户不存在
!"
, Toast.LENGTH_SHORT).
show
();
}
else
{
dataItem.setText(
"
王五
"
);
dataItemDao.update(user);
}
|
查询
查询id值介于2到13之间的数据,limit表示查询5条数据
List
<DataItem>
list
= dataItemDao.queryBuilder()
.
where
(UserDao.Properties.Id.between(
2
,
13
)).limit(
5
).build().
list
();
for (int i =
0
; i <
list
.size(); i++) {
Log
.d(
"google_lenve"
,
"search: "
+
list
.get(i).toString());
}
|
三、GreenDao数据库简单使用总结
GreenDao数据库的使用步骤归纳总结包括如下:
1.在Gradle脚本中配置GreenDao的依赖和编译配置,在代码中定义数据库表类DataItem。
2.编译工程,生成DataItem变量的存取函数和构造函数和DataItemDao的数据库操作函数。
3.定义数据库的初始化,获取DataItemDao的对象对数据库进行插入,删除,修改和查询操作。
四、数据库的升级
4.1 背景介绍
现网需要对APP版本升级,但是升级版本中的DataItem中增加了字段,这需要对数据库升级。
修改数据库版本号
greendao {
schemaVersion 2
//改版本号为2
daoPackage 'com.anye.greendao.gen'
;
targetGenDir 'src/main/java'
}
|
DataItem中增加需要添加的字段
package org.greenrobot.greendao.example;
/**
* Created by moxie on 2018/4/21.
*/
import
org.greenrobot.greendao.annotation.Convert;
import
org.greenrobot.greendao.annotation.Entity;
import
org.greenrobot.greendao.annotation.Generated;
import
org.greenrobot.greendao.annotation.Id;
import
org.greenrobot.greendao.annotation.Index;
import
org.greenrobot.greendao.annotation.NotNull;
import
java.util.
Date
;
@Entity
public
class DataItem {
@Id
private
Long id;
@NotNull
private
String
text;
private String addedItem
private
String
comment;
private
java.util.
Date
date
;
}
|
数据库表升级
@Override
public
void
onUpgrade(Database db, int oldVersion, int newVersion) {
if
(oldVersion <=
2
) {
db.execSQL(
String
.format(
"ALTER TABLE %s ADD %s INTEGER DEFAULT 1"
,
dataItemDao.TABLENAME, dataItemDao.Properties.AddedItem.columnName));
}
}
|