初试GreenDAO 3.2.3
参考链接地址:
http://mp.weixin.qq.com/s/aEUSsSo3heKDrD2jeDLRmw
http://www.open-open.com/lib/view/open1484706351512.html
下面先列出几个ORM框架:
ORMLite:
基于注解和反射的的方式,导致ormlite性能有着一定的损失(注解其实也是利用了反射的原理)greendao:
1、对于Android高度优化
2、最小化内存开销
3、较小的文件体积,只集中在必要的部分上ormndroid
androrm
ActiveAndroid什么是ORM:(Object Relation Mapping 对象关系映射)
将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
优点:
1、让业务代码访问对象,而不是数据库表
2、无需处理数据库实现
3、隐藏了面向对象的逻辑SQL查询详情
集成greanDAO:
GitHub地址:https://github.com/greenrobot/greenDAO
在你的整个项目的Gradle中添加:
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath ‘com.android.tools.build:gradle:2.3.1’
classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.2’
}
}在你的app的Gradle中添加:
apply plugin: ‘com.android.application’
apply plugin: ‘org.greenrobot.greendao’ // apply plugindependencies {
compile ‘org.greenrobot:greendao:3.2.2’ // add library
}“`
大功告成,但是……(可能会出现以下问题)
这是因为AndroidStudio的gradle包版本和gradle plugin版本不对应
Gradle Plugin 和 Gradle的版本的需求,例如这里如果plugin是2.3.0的那么Gradle 就至少是3.3的:
注意:我之前AS的版本是2.1.2,集成之后发现运行不了,然后将AS版本升级到2.3.2,然后没有问题了
修改Gradle Plugin版本:
在整个项目的builde.gradle中:
修改Gradle版本(两种方法):
依次点击file–>setting–>Gradle
这时应该就已经集成成功了
相关注解说明:
实体@Entity注解
schema:告知GreenDao当前实体属于哪个schema
active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
nameInDb:在数据库中使用的别名,默认使用的是实体的类名
indexes:定义索引,可以跨越多个列
createInDb:标记创建数据库表
基础属性注解
@Id:主键 Long 型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “name”)
@NotNull:设置数据库表当前列不能为空
@Transient:添加此标记后不会生成数据库表的列
@Unique:该属性值必须在数据库中是唯一值
@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
索引注解
@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique:向数据库添加了一个唯一的约束
关系注解
@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMany:定义与多个实体对象的关系
第一步:创建Bean对象(表名和字段名)
GreenDao需要创建Bean对象之后,该Bean对象就是表名,而它的属性值就是字段名,其 实现是通过注释的方式来实现的,下面是商品的Bean对象(每个Bean对象对应一张表)
@Entity
public class Shop {
//不能用int
@Id(autoincrement = true)
private Long id;
//商品名称
@Property(nameInDb = "name")
private String name;
//商品价格
@Property(nameInDb = "price")
private String price;
}
注意:这里需要注意的是,创建完成之后,需要build gradle来完成我们的代码自动生成。自动生成的代码有
Bean实体的构造方法和get、set方法 2. DaoMaster、DaoSession、DAOS类
如果要自定义类生成的目录,可以在app的gradle中添加:
第二步:创建数据库(数据库名)
public class MyApplication extends Application{
private static DaoSession daoSession;@Overridepublic void onCreate() { super.onCreate(); //配置数据库 setupDatabase();}/** * 配置数据库 */private void setupDatabase() { //创建数据库shop.db" DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "shop.db", null); //获取可写数据库 SQLiteDatabase db = helper.getWritableDatabase(); //获取数据库对象 DaoMaster daoMaster = new DaoMaster(db); //获取Dao对象管理者 daoSession = daoMaster.newSession();}public static DaoSession getDaoInstant() { return daoSession;}
}
对API的解释:
这里的数据库创建只需要在Application中执行一次即可,这里对几个类进行解释
DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API
由于我们已经创建好了DaoSession和Shop的Bean对象,编译后会自动生成我们的ShopDao对象,可通过DaoSession获得
ShopDao dao = daoSession.getShopDao();
这里的Dao(Data Access Object)是指数据访问接口,即提供了数据库操作一些API接口,可通过dao进行增删改查操作
第三步:数据库的增删改查
/**
* 添加数据,如果有重复则覆盖
* @param shop
*/
public static void insertCart(Shop shop) {
MyApplication.getDaoInstant().getShopDao().insert(shop);
}
/** * 删除数据 * @param id */ public static void deleteCart(long id) { MyApplication.getDaoInstant().getShopDao().deleteByKey(id);}
/**
* 更新数据
* @param shop
*/
public static void updateCart(Shop shop) {
MyApplication.getDaoInstant().getShopDao().update(shop);
}/**
* 查询全部数据
*/
public static List queryAll() {
return MyApplication.getDaoInstant().getShopDao().loadAll();
}
增加单个数据
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();
相关项目已同步到GitHub上:
https://github.com/SmileLB/GreenDAOExample
更多操作还须去官网学习
如果要更新数据库可以去github搜索GreenDaoUpgradeHelper
更多相关文章
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- Android:配置LitePal 3.0
- Android(安卓)在Java代码中设置style属性--使用代码创建Progress
- [置顶] 【博客目录】 Start here o(∩_∩)o
- 【Android】小白进阶之回调监听机制listener
- Android(安卓)camera系统开发之IPC (三)
- Android与Internet(获取资源,多线程断点下载,get/post发送,发送xml)