Android ORM框架 GreenDao3.0的使用
2016-12-08 11:46
281 查看
前言
之前用过许多的Orm框架,例如:ORMLite、greendao、ormndroid、androrm、ActiveAndroid,SugarORM等等,不过都没有一一研究,感觉GreenDao的文档和支持率比较高,所以就一直采用了GreenDao作为项目的Orm框架,关于这些框架的大致分析,可以看我Csdn的文章Android Orm框架分析 ,回到正题,我之前用的还是GreenDao的2.x版本,总体感觉来时是比较难用的,而且唯一不能接受的是新建一个Java项目,然后再项目中配置各个实体的字段等相关属性,然后生成实体以及DAO操作相关的一些类。但是,当你修改了实体中的一些属性,并且这些属性又要在数据库中保存的时候,你会发现每次重新运行generator之前的改变都得重新再来一次。不过作者新发布的GreenDao3的话用了大量的注解,省去了新建项目的繁琐,使用起来也更加简洁明了,我们今天就来讲讲如何使用GreenDao3
介绍
greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。 关于greenDAO的概念可以看官网greenDAO
greenDao优势
1、一个精简的库 2、性能最大化 3、内存开销最小化 4、易于使用的 APIs 5、对 Android 进行高度优化 6、秒胜当前市面上的其他Orm框架(这个也是看总体水平,也是我为什么推崇大家用次框架的重要理由,既然要学就要学最要好用的)
GreenDao的使用
首先gradle引入compile 'org.greenrobot:greendao:3.2.0'//GreenDao
在build.gradle中进行配置:
App:
apply plugin: 'org.greenrobot.greendao'//GreenDao
项目:
buildscript { repositories { jcenter() } dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'//GreenDao } }
然后再Make Project 你会在build/generated/source/greendao中发现新生成的内容,build/generated/source/greendao是默认路径,可以去配置的,配置方法在接下来将会讲到。
Gradle Plugin的配置:
// In the build.gradle file of your app project: android { ... } greendao { schemaVersion 1 //daoPackage 'com.greendao.gen' //targetGenDir 'src/main/java' }
schemaVersion 当前数据库结构的版本。结构版本变化时在OpenHelpers中被使用到。当你改变实体或者数据的结构时,这个值应该增加。
daoPackage 生成的DAO,DaoMaster和DaoSession的包名。默认是实体的包名。
targetGenDir 生成源文件的路径。默认源文件目录是在build目录中的(build/generated/source/greendao)。
generateTests 设置是否自动生成单元测试。
targetGenDirTest 生成的单元测试的根目录。
主要代码
创建一个Bean文件
代码如下实体注解:
@Entity( // 如果你有超过一个的数据库结构,可以通过这个字段来区分 // 该实体属于哪个结构 schema = "myschema", // 实体是否激活的标志,激活的实体有更新,删除和刷新的方法 active = true, // 确定数据库中表的名称 // 表名称默认是实体类的名称 nameInDb = "AWESOME_USERS", // Define indexes spanning multiple columns here. indexes = { @Index(value = "name DESC", unique = true) }, // DAO是否应该创建数据库表的标志(默认为true) // 如果你有多对一的表,将这个字段设置为false // 或者你已经在GreenDAO之外创建了表,也将其置为false createInDb = false ) public class User { ... }
基础注解:
@Entity public class User { @Id(autoincrement = true) private Long id; @Property(nameInDb = "USERNAME") private String name; @NotNull private int repos; @Transient private int tempUsageCount; ... }
1.实体@Entity注解
schema:告知GreenDao当前实体属于哪个schema active:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法 nameInDb:在数据中使用的别名,默认使用的是实体的类名 indexes:定义索引,可以跨越多个列 createInDb:标记创建数据库表
2.基础属性注解
@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长 @Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name") @NotNul:设置数据库表当前列不能为空 @Transient :添加次标记之后不会生成数据库表的列
3.索引注解
@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束 @Unique:向数据库列添加了一个唯一的约束
4.关系注解
@ToOne:定义与另一个实体(一个实体对象)的关系 @ToMany:定义与多个实体对象的关系
编译项目,User实体类会自动编译,生成get、set方法并且会在com.greendao.gen目录下生成三个文件,DaoMaster 、DaoSession、Dao类;
编写帮助类
public class GreenDaoHelper { private static DaoMaster.DevOpenHelper mHelper; private static SQLiteDatabase db; private static DaoMaster mDaoMaster; private static DaoSession mDaoSession; /** * 初始化greenDao,这个操作建议在Application初始化的时候添加; */ public static void initDatabase() { // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。 // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 mHelper = new DaoMaster.DevOpenHelper(MyApplication.context, "cache-db", null); db = mHelper.getWritableDatabase(); // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。 mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); } public static DaoSession getDaoSession() { return mDaoSession; } public static SQLiteDatabase getDb() { return db; } }
增删改查
首先获取UserDao对象:mUserDao = GreenDaoHelper.getDaoSession().getUserDao();
增
数据库的增删改查我们都将通过UserDao来进行,插入操作如下:mUser = new User((long)1,"张三"); mUserDao.insert(mUser);//添加一个
User的第一个参数为id,如果这里传null的话在插入的过程中id字段会自动增长(现在知道为什么id要为Long类型了吧!)
删
删除数据和修改数据的思路一样,都是要先查找到数据:List<User> userList = (List<User>) mUserDao.queryBuilder().where(UserDao.Properties.Id.le(10)).build().list(); for (User user : userList) { mUserDao.delete(user); }
where表示查询条件,这里我是查询id小于等于10的数据,where中的参数可以有多个,就是说可以添加多个查询条件。最后的list表示查询结果是一个List集合,如果你只想查询一条数据,最后unique即可。当然,我们也可以根据id来删除数据:
User user = mUserDao.queryBuilder().where(UserDao.Properties.Id.eq(16)).build().unique(); if (user == null) { Toast.makeText(MainActivity.this, "用户不存在", Toast.LENGTH_SHORT).show(); }else{ mUserDao.deleteByKey(user.getId()); }
根据主键删除
mUserDao.deleteByKey(id);
删除所有数据
mUserDao.deleteAll();
改
根据ID修改数据mUser = new User((long)2,"anye0803"); mUserDao.update(mUser);
查
查询全部数据List<User> users = mUserDao.loadAll();
查询一条数据
User user = mUserDao.queryBuilder().where(UserDao.Properties.name.eq("张三")).unique();
数据库升级
数据库的升级其实就两个步骤我们来看看1.修改gradle文件
首先在module的gradle文件中修改版本号:
//这里改为最新的版本号
schemaVersion 2
2.修改实体类
@Entity public class User { @Property private int age; @Property private String password; @Id private Long id; @Property(nameInDb = "USERNAME") private String username; @Property(nameInDb = "NICKNAME") private String nickname; }
重现编译项目运行即可。一般的数据库升级这样就可以了,特殊情况可能需要自己编写数据库迁移脚本。
总结
总体来说,GreenDao3.0在配置上相对于2.0要简单的多。个人还是比较喜欢3.0版本的,希望大家活学活用。
另外发现几篇写的还不错的文章,分享给大家:
GreenDao3.0简单使用
Android数据存储之GreenDao 3.0 详解
玩转Android之数据库框架greenDAO3.0使用指南
戴定康的个人博客,欢迎访问。交个朋友
相关文章推荐
- Android ORM框架 GreenDao3.0的使用
- 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android Greendao3.0框架的使用
- 玩转Android之数据库框架greenDAO3.0使用指南
- 玩转Android之数据库框架greenDAO3.0使用指南
- Android 数据库ORM框架GreenDao学习心得及使用总结<一>
- 玩转Android之数据库框架greenDAO3.0使用指南
- 玩转Android之数据库框架greenDAO3.0使用指南
- 玩转Android之数据库框架greenDAO3.0使用指南
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android ORM框架 greenDAO 使用方法
- Android之数据库框架greenDAO3.0使用指南
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- 玩转Android之数据库框架greenDAO3.0使用指南
- 玩转Android之数据库框架greenDAO3.0使用指南
- Android开源:数据库ORM框架GreenDao学习心得及使用总结