Android ORM 框架之GreenDAO(二) 进阶
2016-10-08 17:53
351 查看
Android ORM 框架之 GreenDAO(一) 简单使用 这篇文章讲解了使用 GreenDAO创建DAO以及使用该DAO创建数据库、表等,没有涉及过多的数据库操作以及更新,今天就来看看GreenDAO的这些具体操作如何实现。
一、概述。
1. schema。
实体数据schema是你定义的第一个对象,通过schema的版本和缺省的java包调用构造器。
2. 实体。
一旦你拥有了一个schema对象,就可以使用它去添加实体了。
默认表名就是大写实体类名,当然也可以指定表名,
3. 属性和主键。(即给表中添加字段)
给实体添加属性,调用实体的addXXXProperty("属性名")方法添加属性即可。
GreenDAO会自动根据实体类属性创建表字段,并赋予默认值。例如在数据库方面的表名和列名都来源于实体类名和属性名。默认的,表中列名是大写单词。在使用GreenDAO时,一个实体类只能对应一个表,目前没法做到一个表对应多个实体类,或者多个表共用一种对象类型。(在生成的实体类中,int类型为自动转为long类型)
二、增删改查。
1. 插入
(1). 插入
如果student指定主键与表中已经存在了,就会发生异常,不能插入
(2). 替换或插入
(3). 批量插入
2. 删除
(1). 根据id删除某一条数据
(3). 批量删除
(4). 删除所有
(1). 单条更新
(1). 单条查询
(2). 获取某张表的所有数据
QueryBuilder
QueryBuilder可以帮助你构建自定义的查询语句,而不使用SQL的情况。并不是每个人都喜欢书写SQL语句,当然很容易就会出一些错,这些错误只有在运行的时候才会被发现。而QueryBuilder很容易使用,节省了你书写SQL语句的时间。
(3). 复合查询
举例:查询所有姓名为“job”的用户,且按姓名排序。
GreenDAO还提供了多重条件查询。db.and表示查询条件取"与",db.or表示查询条件取"或"。
有关查询更加详解的说明,请参考这篇文章greenDAO系列5--查询。
三、数据库版本更新。
当数据库表中的字段更改时,我们便需要更新数据库。那么如何使用GreenDAO来执行该操作呢!需要我们重写DaoMaster.OpenHelper的onUpgrade()方法,默认情况下,GreenDao升级的时候,将所有的表删除后再建,所以我们需要在onUpgrade()中处理有关升级操作。
1. 实例1,给某表添加新字段。
首先 修改数据库的版本号,
接着,添加字段
最后,DbHelper需要继承DaoMaster.OpenHelper,重新onUpgrade()方法,
2. 实例2,增加一个新表。
首先 修改数据库的版本号,
重新运行ExampleDaoGenerator类,重新生成新的java实体和处理业务的dao层等。(运行前,可先删除java-gen目录下的包和类)
最后,DbHelper需要继承DaoMaster.OpenHelper,重新onUpgrade()方法,
可以看到表名是大写的类名,表中字段名也是大写。
至此,有关数据库表升级就结束了!相信你看到这里,有关数据库表升级,那都不是事!
四、小结
使用GreenDAO来处理Sqlite,是不是很方便快捷呢!两篇文章从入门到复杂,讲解了有关GreenDAO的具体操作!各位同学看完之后,记得要多动手才行!
一、概述。
1. schema。
实体数据schema是你定义的第一个对象,通过schema的版本和缺省的java包调用构造器。
// 第一个参数是数据库版本号,第二个参数是根目录的包路径 int version=1; String defaultPackage="cn.xinxing.model"; Schema schema = new Schema(version, defaultPackage);
2. 实体。
一旦你拥有了一个schema对象,就可以使用它去添加实体了。
//一个实体(类)就关联到数据库中的一张表 Entity entity = schema.addEntity("Student");
默认表名就是大写实体类名,当然也可以指定表名,
entity.setTableName("student");
3. 属性和主键。(即给表中添加字段)
给实体添加属性,调用实体的addXXXProperty("属性名")方法添加属性即可。
entity.addStringProperty("name").notNull();//添加String类型的name,不能为空 entity.addIntProperty("age");//添加Int类型的age entity.addDoubleProperty("score");//添加Double的score当然,你也可以指定主键,并且主键是自增长,
entity.addIdProperty().primaryKey().autoincrement();//添加Id为主键,自增长
GreenDAO会自动根据实体类属性创建表字段,并赋予默认值。例如在数据库方面的表名和列名都来源于实体类名和属性名。默认的,表中列名是大写单词。在使用GreenDAO时,一个实体类只能对应一个表,目前没法做到一个表对应多个实体类,或者多个表共用一种对象类型。(在生成的实体类中,int类型为自动转为long类型)
二、增删改查。
1. 插入
(1). 插入
public void insertStudent(Student student) { mStunentDao.insert(student); }
如果student指定主键与表中已经存在了,就会发生异常,不能插入
(2). 替换或插入
mStunentDao.insertOrReplace(student);当主键存在的时候会替换,所以能够很好的执行插入操作
(3). 批量插入
public void insertStudents(List<Student> students){ mStunentDao.insertInTx(students); }
2. 删除
(1). 根据id删除某一条数据
public void deleteStudentById(long id) { mStunentDao.deleteByKey(id); }(2). 删除单条,传入实体类
mStunentDao.delete(student);
(3). 批量删除
public void deleteStudent(List<Student> students) { mStunentDao.deleteInTx(students); }
(4). 删除所有
public void deleteAllStudent() { mStunentDao.deleteAll(); }3. 更新
(1). 单条更新
public void update(Student student) throws Exception { mStunentDao.update(student); }(2). 批量更新
public void updateStudents(List<Student> students) throws Exception { mStunentDao.updateInTx(students); }4. 查询
(1). 单条查询
public Student queryStudentById(long id) throws Exception { return mStunentDao.load(id); }
(2). 获取某张表的所有数据
public List<Student> getAllStudents() { return mStunentDao.loadAll(); }
QueryBuilder
QueryBuilder可以帮助你构建自定义的查询语句,而不使用SQL的情况。并不是每个人都喜欢书写SQL语句,当然很容易就会出一些错,这些错误只有在运行的时候才会被发现。而QueryBuilder很容易使用,节省了你书写SQL语句的时间。
(3). 复合查询
举例:查询所有姓名为“job”的用户,且按姓名排序。
List list = mStunentDao.queryBuilder() .where(StudentDao.Properties.Name.eq("job")) .orderAsc(StudentDao.Properties.Name) .list();QueryBuilder方法采用build链式结构可以灵活地添加各种查询相关的约束,where包含具体的查询条件,limit表示查询数据的条目数量,offset表示查询数据的起始位置,orderAsc表示根据某一列进行排序,最后list得到查询结果。
GreenDAO还提供了多重条件查询。db.and表示查询条件取"与",db.or表示查询条件取"或"。
有关查询更加详解的说明,请参考这篇文章greenDAO系列5--查询。
三、数据库版本更新。
当数据库表中的字段更改时,我们便需要更新数据库。那么如何使用GreenDAO来执行该操作呢!需要我们重写DaoMaster.OpenHelper的onUpgrade()方法,默认情况下,GreenDao升级的时候,将所有的表删除后再建,所以我们需要在onUpgrade()中处理有关升级操作。
1. 实例1,给某表添加新字段。
首先 修改数据库的版本号,
int version=2;
接着,添加字段
entity.addIntProperty("sno");//学号 新增重新运行ExampleDaoGenerator类,重新生成新的java实体和处理业务的dao层等。(运行前,可先删除java-gen目录下的包和类)
最后,DbHelper需要继承DaoMaster.OpenHelper,重新onUpgrade()方法,
@Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { Log.i("greenDAO-DbHelper", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); if(newVersion==2){ // 修改Student表 db.execSQL("ALTER TABLE 'Student' ADD 'SNO' int"); } }运行后,查看数据库Student表新增了一列并且旧的数据还在,截图如下所示,
2. 实例2,增加一个新表。
首先 修改数据库的版本号,
int version=3;接着,添加了一个新表成绩表,
private static void addScore(Schema schema) { Entity score = schema.addEntity("Score"); //给实体类中添加属性(即给表中添加字段) score.addIdProperty().primaryKey().autoincrement();//添加Id,自增长 score.addIntProperty("sno");//学号 score.addLongProperty("score");//成绩 }并且需要在ExampleDaoGenerator的main()方法中,添加
addScore(schema);
重新运行ExampleDaoGenerator类,重新生成新的java实体和处理业务的dao层等。(运行前,可先删除java-gen目录下的包和类)
最后,DbHelper需要继承DaoMaster.OpenHelper,重新onUpgrade()方法,
@Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { Log.i("greenDAO-DbHelper", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); if(newVersion==3){ ScoreDao.createTable(sqLiteDatabase,false); } }运行后,查看数据库多了一个新表,截图如下所示,
可以看到表名是大写的类名,表中字段名也是大写。
至此,有关数据库表升级就结束了!相信你看到这里,有关数据库表升级,那都不是事!
四、小结
使用GreenDAO来处理Sqlite,是不是很方便快捷呢!两篇文章从入门到复杂,讲解了有关GreenDAO的具体操作!各位同学看完之后,记得要多动手才行!
相关文章推荐
- Android ORM 框架:GreenDao 使用详解(进阶篇)
- Android ORM 框架:GreenDao 使用详解(基础篇)
- Android ORM 框架:GreenDao 使用详解
- Android ORM 框架之greenDAO
- Android ORM数据库框架之-greenDao(四)
- Android ORM 框架:GreenDao 数据库升级
- Android 数据库ORM开源框架之greenDAO
- 【Android】ORM数据库框架之GreenDao【关联】关系操作
- Android ORM 框架:GreenDao 数据库升级
- Android ORM 框架之 greenDAO 学习
- 【Android】ORM数据库框架之GreenDao快速入门与使用
- Android ORM 框架:GreenDao的使用,只需看一遍就会
- Android ORM数据库框架之-greenDao(三)
- GreenDAO-Android 轻量级ORM数据库框架
- android高效ORM数据库框架greenDao使用
- Android整合网上资源以及个人对GreenDao数据库框架的理解与使用(android-studio开发)
- Android开发数据库之第三方ORM框架(GreenDao),ormgreendao
- Android 的ORM GreenDao
- Android ORM之GreenDao学习
- greenDao实践,使用orm优秀的第三方框架