GreenDao简单使用
1.首先在project的glide中添加下面的配置
dependencies { classpath 'com.android.tools.build:gradle:3.0.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' }
2.在app的glide中添加下面的配置
apply plugin: 'org.greenrobot.greendao'compile 'org.greenrobot:greendao:3.2.2'greendao {//在依赖导入汇总添加一个自动添加数据库表名的配置依赖 schemaVersion 1 //数据库版本号 daoPackage 'com.zhenggzh.dream.retrofitandrxjavademo.database' //指定设置DaoMaster、DaoSession、Dao目录 可根据项目本身设置 (可以根据自己的项目进行修改) targetGenDir 'src/main/java' }
3.创建一个shop类
package com.zhenggzh.dream.retrofitandrxjavademo.database;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Unique;
/**
* @Entity:告诉GreenDao该对象为试题,只有被@Entity注释的bean类才能被dao类操作
* @Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true) 标识主键会自增
* @Property:可以自定义字段名,注意外键不能使用该属性
* @NotNull:属性不能为空
* @Transient:使用该注释的属性不会被存入数据库的字段中
* @Unique:该属性值在数据库中是唯一值
* @Generated:编译后自动生成的构造函数,方法等的注释 提示构造函数,方法发等不能为修改
*/
@Entity
public class Shop {
//标识购物车列表
public static final int TYPE_CART =0x01;
//id不能使用int类型 指定使用Long类型 标识主键 自增
@Id(autoincrement = true)
private Long id;
//商品名称(unique表示该属性必须在数据库中是唯一的值)
@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;
@Generated(hash = 1304458862)
public Shop(Long id, String name, String price, int sell_num, String image_url, String address, int type) {
this.id = id;
this.name = name;
this.price = price;
this.sell_num = sell_num;
this.image_url = image_url;
this.address = address;
this.type = type;
}
@Generated(hash = 633476670)
public Shop() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public int getSell_num() {
return sell_num;
}
public void setSell_num(int sell_num) {
this.sell_num = sell_num;
}
public String getImage_url() {
return image_url;
}
public void setImage_url(String image_url) {
this.image_url = image_url;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
3.在项目中 make project(快捷键:ctrl + f9) 会在指定的包下生成DaoMaster DaoSession ShopDao(根据新建的bean类)生成3个文件
4.在Application中配置数据库
public class BigEyeApplication extends Application {
public static Context appContext;
public static BigEyeApplication app;
public static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
appContext = getApplicationContext();
app = this;
//配置数据库
setupDatabase();
}
/**
* 配置数据库
*
* DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
* DaoMaster:GreenDao的顶级对象,作为数据库对象。用于创建表和删除表
* Daosession:管理所有的Dao对象,Dao对象中存在着增删改查
*/
private void setupDatabase(){
//创建数据库shop.db
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(appContext,"shop.db");
//获取可写数据库
SQLiteDatabase db = helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster = new DaoMaster(db);
//获取到对象管理者
daoSession = daoMaster.newSession();
}
public static DaoSession getDaoInstanct(){
return daoSession;
}
}
5.新建一个Dao做具体的增删改查的操作
public class LoveDao { /** * 添加数据 如果有重复就直接覆盖 */ public static void insertShop(Shop shop){ BigEyeApplication.getDaoInstanct().getShopDao().insertOrReplace(shop); } /** * 删除数据 * @param id */ public static void deleteShop(Long id){ BigEyeApplication.getDaoInstanct().getShopDao().deleteByKey(id); } /** * 更改数据 * @param shop */ public static void updateShop(Shop shop){ BigEyeApplication.getDaoInstanct().getShopDao().update(shop); } /** * 查询类型为1的数据 * @return */ public static QueryBuilderqueryShop(){ return BigEyeApplication.getDaoInstanct().getShopDao().queryBuilder().where(ShopDao.Properties.Type.eq(Shop.TYPE_CART)); } /** * 查询所有 * @return */ public static List queryAll(){ return BigEyeApplication.getDaoInstanct().getShopDao().loadAll(); } }
6.根据自己的需求进行增删改查的操作
具体的调用示例如下:
增:
Shop shop = new Shop(); shop.setType(shop.TYPE_CART); shop.setAddress("广东深圳"); shop.setPrice("19.40"); shop.setSell_num(1234); shop.setName("梅菜扣肉"+ i++); LoveDao.insertShop(shop);
删://在使用前判断本地数据库中的数据是否为空 根据id进行删除
LoveDao.deleteShop(shops.get(0).getId());
改://在使用前判断本地数据库中的数据是否为空
Shop shop = shops.get(0); shop.setName("修改名字"); LoveDao.updateShop(shop);
查://查询所有
Listshops = LoveDao.queryAll();