您的位置:首页 > 数据库

GreenDao的学习和使用

2017-01-23 23:15 274 查看
greenDao官网地址:http://greenrobot.org/greendao/

一、前言

1、greenDao:对您的数据库使用greenDao ORM(Object Relational Mapping)

greenDao是一个开源的Android ORM,使得Sqlite数据库变得更加方便。它减轻了开发者处理低级数据需求,从而缩短了开发时间。Sqlite是一个嵌入型的关系数据库。但是,编写SQL和解析查询结果是相当冗长和耗时的任务,greenDao通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”)来释放这些。这样,您可以使用简单的面向对象的API存储,更新,删除和查询Java对象。

Object Relation Mapping对象关系映射



2、GreenDao之所以很流行,跟它的优点是息息相关的,从官网中可以看到这样一张图,其表示了在主流的ORM第三方库中,其对数据库操作的速度是最快的



3、greenDao的功能预览

最高性能(可能是Android的最快ORM);

易于使用的强大的API,涵盖关系和联接;

最小的内存消耗;

小的库大小(<100KB),以保持您的构建时间低,并避免65k方法限制;

数据库加密:greenDAO支持SQLCipher以保证用户的数据安全;

强大的社区:超过5.000 GitHub Start表明有一个强大和活跃的社区;

二、GreenDao3.2的配置

下面我就根据网上的一些教程进行配置,3.0之前的配置貌似比较烦,还好升级了

亲测有效!

1、在工程(Project)的build.gradle中添加依赖

dependencies {
//greenDao生产代码插件
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
}


2、在项目(Module)的build.gradle中添加依赖

//greendao插件
apply plugin: 'org.greenrobot.greendao'
android {
greendao {
//数据库schema版本,也可以理解为数据库版本号
schemaVersion 1
//设置DaoMaster 、DaoSession、Dao包名
daoPackage 'com.millet.demotest.db'
//设置DaoMaster 、DaoSession、Dao目录
targetGenDir 'src/main/java'
//设置生成单元测试目录
//targetGenDirTest
//设置自动生成单元测试用例
//generateTests
}
}
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}


在gradle的根模块中加入上述代码,就完成了我们的基本配置了。

schemaVersion—->指定数据库schema版本号,迁移等操作会用到

daoPackage——–>通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名

targetGenDir——–>这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的Java目录中,而不是build中,这样就不用额外的设置资源目录了

三、创建实体类(表名和字段名)

GreenDao需要创建Bean对象之后,该Bean对象就是表名,而它的属性值就是字段名,其实现是通过注释的方式来实现的,下面是一个的Bean对象(每个Bean对象对应一张表)

@Entity
public class Shop{
//表示为购物车列表
public static final int TYPE_CART = 0x01;
//表示为收藏列表
public static final int TYPE_LOVE = 0x02;
//不能用int
@Id(autoincrement = true)
private Long id;
//商品名称
@Unique
private String name;
//商品价格
@Property(nameInDb = "price")
private String price;
//已售数量
private int sell_num;
//图标url
private String image_url;
//商家地址
private String address;
//商品列表类型
private int type;
}


这里需要注意的是,创建完成之后,需要build gradle来完成我们的代码自动生成。自动生成的代码有:

Bean实体的构造方法和get、set方法

DaoMaster、DaoSession、DAOS类

生成上面的方法和类需要编译或者运行一下:



这里对Bean对象的注释进行解释:

@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作

@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值

@Property:可以自定义字段名,注意外键不能使用该属性

@NotNull:属性不能为空

@Transient:使用该注释的属性不会被存入数据库的字段中

@Unique:该属性值必须在数据库中是唯一值

@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改

四、创建数据库(数据库名)

1、一般都是在Application的子类中创建,例如:

public class BaseApplication extends Application {

private static DaoSession daoSession;

@Override
public void onCreate() {
super.onCreate();
//配置数据库
setupDatabase();
}

/**
* 配置数据库
*/
private void setupDatabase() {
//创建数据库millet.db"
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "millet.db", null);
//获取可写数据库
SQLiteDatabase db = helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster = new DaoMaster(db);
//获取Dao对象管理者
daoSession = daoMaster.newSession();
}

public static DaoSession getDaoInstant() {
return daoSession;
}
}


可以发现,GreenDao已经将我们的数据库创建缩成几句话,代码会自动将Bean对象创建成表,不再是传统的手写SQL语句。这里的数据库创建只需要在Application中执行一次即可,这里对几个类进行解释

DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现

DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表

DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API

由于我们已经创建好了DaoSession和Shop的Bean对象,编译后会自动生成我们的ShopDao对象,可通过DaoSession获得

ShopDao dao = daoSession.getShopDao();


五、在代码中使用

增删改查:

public class MilletDao {

/**
* 添加数据,如果有重复则覆盖
*
* @param shop
*/
public static void insertLove(Shop shop) {
BaseApplication.getDaoInstant().getShopDao().insertOrReplace(shop);
}

/**
* 删除数据
*
* @param id
*/
public static void deleteLove(long id) {
BaseApplication.getDaoInstant().getShopDao().deleteByKey(id);
}

/**
* 更新数据
*
* @param shop
*/
public static void updateLove(Shop shop) {
BaseApplication.getDaoInstant().getShopDao().update(shop);
}

/**
* 查询条件为Type=TYPE_LOVE的数据
*
* @return
*/
public static List<Shop> queryLove() {
return BaseApplication.getDaoInstant().getShopDao().queryBuilder().where(ShopDao.Properties.Type.eq(Shop.TYPE_LOVE)).list();
}

/**
* 查询全部数据
*/
public static List<Shop> queryAll() {
return BaseApplication.getDaoInstant().getShopDao().loadAll();
}

}


效果很明显,GreenDao的封装更加短小精悍,语义明朗,下面对GreenDao中Dao对象其他API的介绍

增加单个数据
getShopDao().insert(shop);
getShopDao().insertOrReplace(shop);

增加多个数据
getShopDao().insertInTx(shopList);
getShopDao().insertOrReplaceInTx(shopList);

查询全部
List< Shop> list = getShopDao().loadAll();
List< Shop> list = getShopDao().queryBuilder().list();

查询附加单个条件
.where()
.whereOr()

查询附加多个条件
.where(, , ,)
.whereOr(, , ,)

查询附加排序
.orderDesc()
.orderAsc()

查询限制当页个数
.limit()

查询总个数
.count()

修改单个数据
getShopDao().update(shop);

修改多个数据
getShopDao().updateInTx(shopList);

删除单个数据
getTABUserDao().delete(user);

删除多个数据
getUserDao().deleteInTx(userList);

删除数据ByKey
getTABUserDao().deleteByKey();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 greenDao sqlite