简介
greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询;
greenDAO搭建(Andorid Studio)
Step1:创建greenDAO工程
创建java工程用来生成DaoMaster,DaoSession,DAO文件,实体文件;

DaoMaster:一看名字就知道它是Dao中的最大的官了。它保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架;
DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法;
XXXDao:实际生成的某某DAO类,通常对应具体的java类,比如NoteDao等。其有更多的权限和方法来操作数据库元素;
XXXEntity:持久的实体对象。通常代表了一个数据库row的标准java properties;
Step2:配置greenDAO工程build.gradle
apply plugin: 'java'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//greendao依赖库
compile 'de.greenrobot:greendao-generator:2.1.0'
compile 'de.greenrobot:greendao:2.1.0'
}
Step3:生成greenDAO代码
注:生成一对一或一对多表关系请参考这个 链接
public class MyKBang {
public static void main(String args[]) throws Exception {
//生成Greendao相关文件,需要参数版本号,生成bean类放的目录
//数据库变化重新生成,版本号需要加1或都大于之前
Schema schema = new Schema(1, "com.kbang.convenientlife.bean");
//设置一下生成的三个java文件(DaoMaster,DaoSession,***Dao)的目录
schema.setDefaultJavaPackageDao("com.kbang.convenientlife.greendao");
initUserBean(schema);
//生成到那个路径
new DaoGenerator().generateAll(schema, "../android_kb_shangchao/kbang/src/main/java");
}
/**
* 生成实体配置
* 1.添加属性支持基本数据类型
* @param schema
*/
private static void initUserBean(Schema schema) {
//用户信息表名
Entity userBean = schema.addEntity("UserInfo");
// 表重命名
//userBean.setTableName("phone");
//用来实现序列化的接口
userBean.implementsSerializable();
//方式一 建立自增的主键
//userBean.addLongProperty("id").primaryKey().index().autoincrement();
//方式二 建立自增的主键
userBean.addIdProperty();
userBean.addStringProperty("code");
userBean.addStringProperty("os");
userBean.addStringProperty("osVersion");
userBean.addStringProperty("name");
userBean.addStringProperty("phoneLocation");
userBean.addStringProperty("attachmentPath");
userBean.addStringProperty("cityId");
userBean.addStringProperty("sex");
userBean.addStringProperty("attachmentId");
}
}
Step4:整合到android工程
将greenDAO工程生成文件拷贝到android项目中,存放路径跟生成路径保持一致;
在android项目build.gradle引入依赖库:
compile 'de.greenrobot:greendao-generator:2.1.0'
compile 'de.greenrobot:greendao:2.1.0'
创建简单类测试一下:
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "Test-db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();
UserInfo note = new UserInfo();
userInfo.setName("kais");
userInfo.setSex("男");
noteDao.insert(note); //插入数据
noteDao.deleteByKey(id);//删除数据
为升级数据库在这自己继承封装DaoMaster.DevOpenHelper代码如下:
DatabaseHelper.java
public class DatabaseHelper extends DaoMaster.OpenHelper {
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion){
case 1:
break;
}
}
}
DatabaseLoader.java
public class DatabaseLoader {
//数据库名称
private static final String DATABASE_NAME = "Test-db";
//用来获取Dao的
private static DaoSession daoSession;
/**
* 在Application中调用,初始化数据库
*
* @param context
*/
public static void init(Context context) {
//使用自定义的OpenHelper的到SQLiteDatabase
DatabaseHelper helper = new DatabaseHelper(context, DATABASE_NAME, null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
public static DaoSession getDaoSession() {
return daoSession;
}
}
grenDAO增删改查
//常用操作
public long insert(T entity)//增
public void delete(T entity)//删
public void update(T entity)//改
//load查询
public T load(K key)//根据主键加载实体对象
public T loadByRowId(long rowId)//根据rowId加载实体对象
public List<T> loadAll()//加载所有有效实体对象
//query查询
public QueryBuilder<T> queryBuilder()//用于构建查询的类
public List<T> queryRaw(String where, String... selectionArg)//根据条件查询