GreenDao的那些事

  1. 首先是基本的配置
    在主工程下配置
    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
    }
    }
    //下面配置
    **sourceSets {
    main {
    java.srcDirs = [‘src/main/java’, ‘src/main/java-gen’]
    }
    }**
    }

dependencies {
compile fileTree(include: [‘*.jar’], dir: ‘libs’)
compile ‘com.android.support:appcompat-v7:24.0.0’
compile ‘de.greenrobot:greendao:1.3.7’
}
创建java项目在studio中可以通过 File -> New -> New Module -> Java Library -> 填写相应的包名与类名 -> Finish.
配置
compile ‘de.greenrobot:greendao-generator:1.3.1’

Schema
//de.greenrobot.daoexample生成的包名可以自己设置,
Schema schema = new Schema(1, “de.greenrobot.daoexample”);
**实体
一旦你拥有了一个schema对象,你就可以使用它去添加实体了。
一张表对应一个实体类**
Entity user = schema.addEntity(“User”);
一个实体有不同的可变更设置,更重要的是,你可以添加一些属性到实体。
字段的设置有对应的参数类型。可以设置非空
user .addStringProperty(“text”).notNull();
user.addIdProperty();//主键
user.addStringProperty(“name”);
user.addStringProperty(“password”);
user.addIntProperty(“yearOfBirth”);

继承、接口、序列化
实体可以从其他非实体类继承,其父类可以通过setSuperclass(String)方法指定,注意:它可能会有其它的实体作为父类(但这里没有多态查询)。
比如:
user.setSuperclass(“MyCommonBehavior”);
user.implementsInterface(“C”);
user.implementsSerializable();
除了实体,还可以添加,一对一和一对多的关系。

一旦你的实体schema放置好了,你可以触发代码生成器进行处理。在generator工程中,你可以实例化DaGenerator并调用generateAll中的一个方法:
DaoGenerator daoGenerator = new DaoGenerator();
daoGenerator.generateAll(schema, “../MyGreenDAO/app/src/main/java-gen”);//这个目录必须和你的项目中的文件夹名字一样否则找不到异常。..代表回到上一个目录。在你的项目中创建对应的目录main下java-gen包。代码会在这个包下自动生成。
在主项目中应用

1.首先初始化操作
//DevOpenHelper这个类中系统在update的时候会删除所有的表再去创建会导致在升级的时候数据丢失
//使用的时候包装一个类继承它,将其中update的方法空实现。
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, “notes-db”, null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
userDao= daoSession.getUserDao();
User note = new User(null);
userDao.insert(note);//插入该对象这样完成添加。userDao中封装增删改查的方法。

2.查询
List joes = userDao.queryBuilder()
.where(Properties.FirstName.eq(“Joe”))
.orderAsc(Properties.LastName)
.list();

嵌套情况:
获取用户名字为“Joe”并且在1970年9月之后出生的用户
这里要说明下:user 的birthday对于year,month,和day是一个分离的属性。我们可以以一种更正常的方式表达这种条件:
First name is “Joe” AND (year of birth is greater than 1970 OR (year of birth is 1970 AND month of birth is equal to or greater than 10 (October).
QueryBuilder qb = userDao.queryBuilder();
qb.where(Properties.FirstName.eq(“Joe”),
qb.or(Properties.YearOfBirth.gt(1970),
qb.and(Properties.YearOfBirth.eq(1970), Properties.MonthOfBirth.ge(10))));
List youngJoes = qb.list();

使用query对象获取出生在1970年 并且 first name 为 joe 的用户:
Query query = userDao.queryBuilder().where(
Properties.FirstName.eq(“Joe”), Properties.YearOfBirth.eq(1970))
.build();
List joesOf1970 = query.list();
使用query对象,可以查询

query.setParameter(0, “Maria”);
query.setParameter(1, 1977);
List mariasOf1977 = query.list();

看sql输入和值传入是否符合预期
如果你的query没有返回期望的结果,这里有两个静态的flag,可以开启QueryBuilder身上的SQL和参数的log。在log中打印。
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;

最后
主要介绍 greenDAO 的基本用法与配置,更高级与详细的使用,请参见 官网
如本文有任何错误与遗漏,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值