GreenDao的使用

一、前言
在没有使用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));
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值