GreenDao的学习和使用
2017-01-23 23:15
274 查看
greenDao官网地址:http://greenrobot.org/greendao/
greenDao是一个开源的Android ORM,使得Sqlite数据库变得更加方便。它减轻了开发者处理低级数据需求,从而缩短了开发时间。Sqlite是一个嵌入型的关系数据库。但是,编写SQL和解析查询结果是相当冗长和耗时的任务,greenDao通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”)来释放这些。这样,您可以使用简单的面向对象的API存储,更新,删除和查询Java对象。
Object Relation Mapping对象关系映射
2、GreenDao之所以很流行,跟它的优点是息息相关的,从官网中可以看到这样一张图,其表示了在主流的ORM第三方库中,其对数据库操作的速度是最快的
3、greenDao的功能预览
最高性能(可能是Android的最快ORM);
易于使用的强大的API,涵盖关系和联接;
最小的内存消耗;
小的库大小(<100KB),以保持您的构建时间低,并避免65k方法限制;
数据库加密:greenDAO支持SQLCipher以保证用户的数据安全;
强大的社区:超过5.000 GitHub Start表明有一个强大和活跃的社区;
亲测有效!
1、在工程(Project)的build.gradle中添加依赖
2、在项目(Module)的build.gradle中添加依赖
在gradle的根模块中加入上述代码,就完成了我们的基本配置了。
schemaVersion—->指定数据库schema版本号,迁移等操作会用到
daoPackage——–>通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
targetGenDir——–>这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的Java目录中,而不是build中,这样就不用额外的设置资源目录了
这里需要注意的是,创建完成之后,需要build gradle来完成我们的代码自动生成。自动生成的代码有:
Bean实体的构造方法和get、set方法
DaoMaster、DaoSession、DAOS类
生成上面的方法和类需要编译或者运行一下:
这里对Bean对象的注释进行解释:
@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
@Property:可以自定义字段名,注意外键不能使用该属性
@NotNull:属性不能为空
@Transient:使用该注释的属性不会被存入数据库的字段中
@Unique:该属性值必须在数据库中是唯一值
@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
可以发现,GreenDao已经将我们的数据库创建缩成几句话,代码会自动将Bean对象创建成表,不再是传统的手写SQL语句。这里的数据库创建只需要在Application中执行一次即可,这里对几个类进行解释
DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API
由于我们已经创建好了DaoSession和Shop的Bean对象,编译后会自动生成我们的ShopDao对象,可通过DaoSession获得
效果很明显,GreenDao的封装更加短小精悍,语义明朗,下面对GreenDao中Dao对象其他API的介绍
一、前言
1、greenDao:对您的数据库使用greenDao ORM(Object Relational Mapping)greenDao是一个开源的Android ORM,使得Sqlite数据库变得更加方便。它减轻了开发者处理低级数据需求,从而缩短了开发时间。Sqlite是一个嵌入型的关系数据库。但是,编写SQL和解析查询结果是相当冗长和耗时的任务,greenDao通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”)来释放这些。这样,您可以使用简单的面向对象的API存储,更新,删除和查询Java对象。
Object Relation Mapping对象关系映射
2、GreenDao之所以很流行,跟它的优点是息息相关的,从官网中可以看到这样一张图,其表示了在主流的ORM第三方库中,其对数据库操作的速度是最快的
3、greenDao的功能预览
最高性能(可能是Android的最快ORM);
易于使用的强大的API,涵盖关系和联接;
最小的内存消耗;
小的库大小(<100KB),以保持您的构建时间低,并避免65k方法限制;
数据库加密:greenDAO支持SQLCipher以保证用户的数据安全;
强大的社区:超过5.000 GitHub Start表明有一个强大和活跃的社区;
二、GreenDao3.2的配置
下面我就根据网上的一些教程进行配置,3.0之前的配置貌似比较烦,还好升级了亲测有效!
1、在工程(Project)的build.gradle中添加依赖
dependencies { //greenDao生产代码插件 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0' }
2、在项目(Module)的build.gradle中添加依赖
//greendao插件 apply plugin: 'org.greenrobot.greendao' android { greendao { //数据库schema版本,也可以理解为数据库版本号 schemaVersion 1 //设置DaoMaster 、DaoSession、Dao包名 daoPackage 'com.millet.demotest.db' //设置DaoMaster 、DaoSession、Dao目录 targetGenDir 'src/main/java' //设置生成单元测试目录 //targetGenDirTest //设置自动生成单元测试用例 //generateTests } } dependencies { compile 'org.greenrobot:greendao:3.2.0' }
在gradle的根模块中加入上述代码,就完成了我们的基本配置了。
schemaVersion—->指定数据库schema版本号,迁移等操作会用到
daoPackage——–>通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
targetGenDir——–>这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的Java目录中,而不是build中,这样就不用额外的设置资源目录了
三、创建实体类(表名和字段名)
GreenDao需要创建Bean对象之后,该Bean对象就是表名,而它的属性值就是字段名,其实现是通过注释的方式来实现的,下面是一个的Bean对象(每个Bean对象对应一张表)@Entity public class Shop{ //表示为购物车列表 public static final int TYPE_CART = 0x01; //表示为收藏列表 public static final int TYPE_LOVE = 0x02; //不能用int @Id(autoincrement = true) private Long id; //商品名称 @Unique private String name; //商品价格 @Property(nameInDb = "price") private String price; //已售数量 private int sell_num; //图标url private String image_url; //商家地址 private String address; //商品列表类型 private int type; }
这里需要注意的是,创建完成之后,需要build gradle来完成我们的代码自动生成。自动生成的代码有:
Bean实体的构造方法和get、set方法
DaoMaster、DaoSession、DAOS类
生成上面的方法和类需要编译或者运行一下:
这里对Bean对象的注释进行解释:
@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
@Property:可以自定义字段名,注意外键不能使用该属性
@NotNull:属性不能为空
@Transient:使用该注释的属性不会被存入数据库的字段中
@Unique:该属性值必须在数据库中是唯一值
@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
四、创建数据库(数据库名)
1、一般都是在Application的子类中创建,例如:public class BaseApplication extends Application { private static DaoSession daoSession; @Override public void onCreate() { super.onCreate(); //配置数据库 setupDatabase(); } /** * 配置数据库 */ private void setupDatabase() { //创建数据库millet.db" DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "millet.db", null); //获取可写数据库 SQLiteDatabase db = helper.getWritableDatabase(); //获取数据库对象 DaoMaster daoMaster = new DaoMaster(db); //获取Dao对象管理者 daoSession = daoMaster.newSession(); } public static DaoSession getDaoInstant() { return daoSession; } }
可以发现,GreenDao已经将我们的数据库创建缩成几句话,代码会自动将Bean对象创建成表,不再是传统的手写SQL语句。这里的数据库创建只需要在Application中执行一次即可,这里对几个类进行解释
DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API
由于我们已经创建好了DaoSession和Shop的Bean对象,编译后会自动生成我们的ShopDao对象,可通过DaoSession获得
ShopDao dao = daoSession.getShopDao();
五、在代码中使用
增删改查:public class MilletDao { /** * 添加数据,如果有重复则覆盖 * * @param shop */ public static void insertLove(Shop shop) { BaseApplication.getDaoInstant().getShopDao().insertOrReplace(shop); } /** * 删除数据 * * @param id */ public static void deleteLove(long id) { BaseApplication.getDaoInstant().getShopDao().deleteByKey(id); } /** * 更新数据 * * @param shop */ public static void updateLove(Shop shop) { BaseApplication.getDaoInstant().getShopDao().update(shop); } /** * 查询条件为Type=TYPE_LOVE的数据 * * @return */ public static List<Shop> queryLove() { return BaseApplication.getDaoInstant().getShopDao().queryBuilder().where(ShopDao.Properties.Type.eq(Shop.TYPE_LOVE)).list(); } /** * 查询全部数据 */ public static List<Shop> queryAll() { return BaseApplication.getDaoInstant().getShopDao().loadAll(); } }
效果很明显,GreenDao的封装更加短小精悍,语义明朗,下面对GreenDao中Dao对象其他API的介绍
增加单个数据 getShopDao().insert(shop); getShopDao().insertOrReplace(shop); 增加多个数据 getShopDao().insertInTx(shopList); getShopDao().insertOrReplaceInTx(shopList); 查询全部 List< Shop> list = getShopDao().loadAll(); List< Shop> list = getShopDao().queryBuilder().list(); 查询附加单个条件 .where() .whereOr() 查询附加多个条件 .where(, , ,) .whereOr(, , ,) 查询附加排序 .orderDesc() .orderAsc() 查询限制当页个数 .limit() 查询总个数 .count() 修改单个数据 getShopDao().update(shop); 修改多个数据 getShopDao().updateInTx(shopList); 删除单个数据 getTABUserDao().delete(user); 删除多个数据 getUserDao().deleteInTx(userList); 删除数据ByKey getTABUserDao().deleteByKey();
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- Oracle用户被锁原因及办法
- 数据库的迁移救援
- mysql存储引擎MyISAM与InnoDB的优劣
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- SQLite教程(十一):临时文件
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- SQLite中重置自动编号列的方法
- sql2008 还原数据库解决方案