greenDao学习
2016-03-16 16:02
357 查看
项目地址为:https://github.com/greenrobot/greenDAO
greenDao是怎么产生数据库对象代码的呢?
需要建一个Java工程来产生代码,然后把产生的代码给我们的Android工程使用。当然这两个工程都需要相应的依赖。在github的greenDao项目说明中有提供如下:
这个是Android工程的依赖:
这个是Java 工程,也就是代码产生工程的依赖:
在Android Studio 中 New Module,选择Java Library 并添加依赖。
只需要一个类,代码如下:
其中主要的代码就是Entity的定义,Entity就对应数据库中的表,每个Property对应表中的列。
运行代码,就会在 D:/src-gen 目录下产生代代码,并且有其包结构。
创建Android工程
暂且先不管这些类的作用,先看一下怎么在Android工程中配合使用。
新建一个Android Module ,然后将这拷贝这四个类,并且添加相应的依赖。
在Activity的OnCreate方法中加入以下代码
构造DaoMaster.DevOpenHelper 能帮助我们创建数据库,并且得到可写或者可读的数据库对象。把该数据库对象通过DaoMaser的包装,我们可以得到DaoSession 对象,进而得到我们想要操作的任何一个Dao。其中DaoMaster对象对应着一次数据库的连接,一次连接可以有多个Session,每个Session都会分配内存。
插入
在Genymotion模拟器中执行代码,并在Android Device Monitor中的\data\data目录下找到我们运行程序的包,如下图所示
然后点击右上交左边第一个按钮,把数据库文件导出到桌面,打开后可以看到数据已经插入成功。
查找
1、 简单查询
where 函数可以添加多个条件,这些条件之间是与的关系。
2、 or 和and
qb.or() 和qb.and()这两个函数都用来产生条件,很明显or()是返回所有条件的逻辑或的条件,and()返回所有条件逻辑与的结果。
就像下面的两种写法,效果是一样的
3、 Limit, Offset,和Pagination
offset(int n) 设置偏移量,即偏移 n个开始查询;必须和limit()配合使用,不能单独使用
在做ListView的滚动加载更多的时候,这两个就可以配合起来使用。
4、使用SQL 语句查询
如果QueryBuilder 相应的一些方法不能满足你的需求,也可以使用sql语句查询:
只要按照上面给StringCondition 传入sql 中 where 子句即可
或者用queryRaw方法,写如where子句,这个where 子句就添加到SELET * FROM PERSON后面
5、Query 和LazyList
类Query 代表一个查询,这个查询可以被执行多次。上面我们用QueryBuilder的list()方法去获得查询结果时候,实际上在QueryBuilder类内部使用了Query类。如果想要多次执行一个查询,我们可以调用build()方法来产生Query对象,以后再多次调用list()即可。
greenDao也可以返回一条记录或者不满足条件的话返回null,调用Query或者QueryBuilder的unique()方法。
如果你想查询多条记录的话,可以用lsit方法:
list() 返回ArrayList对象,所有的实体加载进内存
lsitLazy() 返回LazyList对象,当使用list中的一个元素时,该元素才加载进内存并且缓存。必须关闭。
listLazyUncached() 无论什么时候使用list中的元素时候都要从数据库中加载。必须关闭。
listIterator() 返回迭代器,然后可以遍历所有记录,使用到记录时加载。。不缓存。必须关闭。
必须被关闭的原因是为了能够在用到时候加载数据,LazyList类中维护了一个数据库的Cursor对象。
lsitLazy()和listIterator()在获取或者遍历所有的元素后会自动关闭cursor,但是如果没有遍历完,必须自己手动关闭。
修改
很简单不多说,unique()只返回一个记录
删除
简介
greenDao是一个对象关系映射(ORM)工具,给关系型数据库SQLite提供面向对象接口。如下图所示:greenDao是怎么产生数据库对象代码的呢?
需要建一个Java工程来产生代码,然后把产生的代码给我们的Android工程使用。当然这两个工程都需要相应的依赖。在github的greenDao项目说明中有提供如下:
这个是Android工程的依赖:
compile 'de.greenrobot:greendao:2.1.0'
这个是Java 工程,也就是代码产生工程的依赖:
compile 'de.greenrobot:greendao-generator:2.1.0'
使用
创建产生代码的工程在Android Studio 中 New Module,选择Java Library 并添加依赖。
只需要一个类,代码如下:
public static void main(String[] args) throws Exception { //"com.pngfi.gen"是生成代码所在的包结构 Schema schema = new Schema(1, "com.pngfi.gen"); addPerson(schema); //第二个参数是生成代码所放的路径 new DaoGenerator().generateAll(schema, "D:/src-gen"); } private static void addPerson(Schema schema) { Entity person = schema.addEntity("Person"); person.addIdProperty(); person.addStringProperty("name").notNull(); person.addIntProperty("age"); person.addDateProperty("birth"); person.addStringProperty("sex"); }
其中主要的代码就是Entity的定义,Entity就对应数据库中的表,每个Property对应表中的列。
运行代码,就会在 D:/src-gen 目录下产生代代码,并且有其包结构。
创建Android工程
暂且先不管这些类的作用,先看一下怎么在Android工程中配合使用。
新建一个Android Module ,然后将这拷贝这四个类,并且添加相应的依赖。
在Activity的OnCreate方法中加入以下代码
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "persons.db", null); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); DaoSession daoSession = daoMaster.newSession(); PersonDao personDao = daoSession.getPersonDao();
构造DaoMaster.DevOpenHelper 能帮助我们创建数据库,并且得到可写或者可读的数据库对象。把该数据库对象通过DaoMaser的包装,我们可以得到DaoSession 对象,进而得到我们想要操作的任何一个Dao。其中DaoMaster对象对应着一次数据库的连接,一次连接可以有多个Session,每个Session都会分配内存。
插入
personDao.insert(new Person(1l,"qiuri",28,new Date(),"男"));
在Genymotion模拟器中执行代码,并在Android Device Monitor中的\data\data目录下找到我们运行程序的包,如下图所示
然后点击右上交左边第一个按钮,把数据库文件导出到桌面,打开后可以看到数据已经插入成功。
查找
1、 简单查询
//查询所有 List<Person> list = personDao.queryBuilder().list(); //复杂查询和排序 personDao.queryBuilder().where(PersonDao.Properties.Name.eq("qiuri")).orderAsc(PersonDao.Properties.Age).list();
where 函数可以添加多个条件,这些条件之间是与的关系。
2、 or 和and
qb.or() 和qb.and()这两个函数都用来产生条件,很明显or()是返回所有条件的逻辑或的条件,and()返回所有条件逻辑与的结果。
就像下面的两种写法,效果是一样的
qb.where(qb.and(PersonDao.Properties.Sex.eq("男"), PersonDao.Properties.Age.gt(28))).list(); qb.where(PersonDao.Properties.Sex.eq("男"),PersonDao.Properties.Age.gt(28));
3、 Limit, Offset,和Pagination
qb.limit(2); //限制返回的结果集数量
offset(int n) 设置偏移量,即偏移 n个开始查询;必须和limit()配合使用,不能单独使用
qb.limit(2); qb.offset(1);
在做ListView的滚动加载更多的时候,这两个就可以配合起来使用。
4、使用SQL 语句查询
如果QueryBuilder 相应的一些方法不能满足你的需求,也可以使用sql语句查询:
Query query = personDao.queryBuilder().where( new WhereCondition.StringCondition("SEX='男'")).build(); List<Person> list = query.list();
只要按照上面给StringCondition 传入sql 中 where 子句即可
或者用queryRaw方法,写如where子句,这个where 子句就添加到SELET * FROM PERSON后面
List<Person> list = personDao.queryRaw("WHERE SEX = ? AND AGE > ?", "男","27");
5、Query 和LazyList
类Query 代表一个查询,这个查询可以被执行多次。上面我们用QueryBuilder的list()方法去获得查询结果时候,实际上在QueryBuilder类内部使用了Query类。如果想要多次执行一个查询,我们可以调用build()方法来产生Query对象,以后再多次调用list()即可。
greenDao也可以返回一条记录或者不满足条件的话返回null,调用Query或者QueryBuilder的unique()方法。
如果你想查询多条记录的话,可以用lsit方法:
list() 返回ArrayList对象,所有的实体加载进内存
lsitLazy() 返回LazyList对象,当使用list中的一个元素时,该元素才加载进内存并且缓存。必须关闭。
lazyList.close();
listLazyUncached() 无论什么时候使用list中的元素时候都要从数据库中加载。必须关闭。
listIterator() 返回迭代器,然后可以遍历所有记录,使用到记录时加载。。不缓存。必须关闭。
必须被关闭的原因是为了能够在用到时候加载数据,LazyList类中维护了一个数据库的Cursor对象。
lsitLazy()和listIterator()在获取或者遍历所有的元素后会自动关闭cursor,但是如果没有遍历完,必须自己手动关闭。
修改
Person p = personDao.queryBuilder().where(PersonDao.Properties.Name.eq("qiuri")).unique(); p.setAge(100); personDao.update(p);
很简单不多说,unique()只返回一个记录
删除
personDao.delete(); personDao.deleteByKey(int key);
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马