Android开源框架GreenDao3.0使用纪要
来源:互联网 发布:惠州狼雨seo 编辑:程序博客网 时间:2024/05/17 03:51
在android开发的过程中,免不了与数据库打交道,今天简单介绍一个orm的一个开源数据库框架GreenDao 3.0 的使用方法。
GreenDao 优点:
1.性能高,号称Android最快的关系型数据库
2.内存占用小
库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
3.支持数据库加密 greendao支持SQLCipher进行数据库加密 有关SQLCipher可以参考这篇博客Android数据存储之Sqlite采用SQLCipher数 据库加密实战
4.简洁易用的APIGreenDao 3.0改动:
使用过GreenDao的同学都知道,3.0之前需要通过新建GreenDaoGenerator工程生成Java数据对象(实体)和DAO对象,非常的繁琐而且也加大了使用成本。
GreenDao 3.0最大的变化就是采用注解的方式通过编译方式生成Java数据对象和DAO对象。
现在网上有些教程配置不能正常运行,接下来的步骤都是亲自试验过的,并且最后会附上github项目给大家。
一、在工程目录下的build.gradle中这么配置:
dependencies { ... classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0' }
编写要入库的实体类,在3.0中,使用的注解的方式进行表的创建。GreenDaoUser:
@Entitypublic class GreenDaoUser { @Id(autoincrement = true) private Long id; private String name; private String address; private String phone;//此处省略了setter和getter方法}
在应用module中的build.gradle加入如下配置:
apply plugin: 'org.greenrobot.greendao'greendao { //数据库的schema版本,也可以理解为数据库版本号 schemaVersion 1 //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。 daoPackage 'com.data.www.datasavedemo.entity' //设置DaoMaster、DaoSession、Dao目录 targetGenDir 'src/main/java'}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha9' compile 'org.greenrobot:greendao:3.0.1' compile 'org.greenrobot:greendao-generator:3.0.0'}
schemaVersion: 数据库schema版本,也可以理解为数据库版本号
daoPackage:设置DaoMaster 、DaoSession、Dao包名
targetGenDir:设置DaoMaster 、DaoSession、Dao目录
targetGenDirTest:设置生成单元测试目录
generateTests:设置自动生成单元测试用例
4.)实体@Entity注解
schema:告知GreenDao当前实体属于哪个schema
active:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法
nameInDb:在数据中使用的别名,默认使用的是实体的类名
indexes:定义索引,可以跨越多个列
createInDb:标记创建数据库表
5.)基础属性注解
@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=”name”)
@NotNul:设置数据库表当前列不能为空
@Transient :添加次标记之后不会生成数据库表的列
6.)索引注解
@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique:向数据库列添加了一个唯一的约束
7.)关系注解
@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMany:定义与多个实体对象的关系
sync之后会发现在daoPackage这个目录下生成了几个类:DaoMaster、DaoSession、GreenDaoUserDao。
工具类DBmanager中的代码:
/** * 获取单例引用 * * @param context * @return */ public static DBManager getInstance(Context context) { if (mInstance == null) { synchronized (DBManager.class) { if (mInstance == null) { mInstance = new DBManager(context); } } } return mInstance; } private SQLiteDatabase getReadableDatabase() { if (openHelper == null) { openHelper = new DaoMaster.DevOpenHelper(context, dbName, null); } SQLiteDatabase db = openHelper.getReadableDatabase(); return db; } /** * 获取可写数据库 */ private SQLiteDatabase getWritableDatabase() { if (openHelper == null) { openHelper = new DaoMaster.DevOpenHelper(context, dbName, null); } SQLiteDatabase db = openHelper.getWritableDatabase(); return db; } public GreenDaoUserDao getWriteUserDao() { DaoMaster daoMaster = new DaoMaster(getWritableDatabase()); DaoSession daoSession = daoMaster.newSession(); GreenDaoUserDao userDao = daoSession.getGreenDaoUserDao(); return userDao; } public GreenDaoUserDao getReadUserDao() { DaoMaster daoMaster = new DaoMaster(getReadableDatabase()); DaoSession daoSession = daoMaster.newSession(); GreenDaoUserDao userDao = daoSession.getGreenDaoUserDao(); //前三行是关键,任何操作,增删改查都是在这个基础上进行的 return userDao; } //获取所有的User public List<GreenDaoUser> getUsers(){ GreenDaoUserDao userDao = getReadUserDao(); QueryBuilder<GreenDaoUser> builder = userDao.queryBuilder(); List<GreenDaoUser> user = builder.list(); return user; } //插入User public void insert(GreenDaoUser user){ GreenDaoUserDao userDao = getWriteUserDao(); userDao.insert(user); } //根据名字删除user public void delete(String name){ GreenDaoUserDao userDao = getWriteUserDao(); userDao.deleteInTx(getusersByName(name)); } //根据名字查询users public List<GreenDaoUser> getusersByName(String name){ GreenDaoUserDao userDao = getReadUserDao(); List<GreenDaoUser> users = userDao.queryRaw("where name=?",new String[]{name}); return users; } //删除所有数据库记录 public void deleteAll(){ GreenDaoUserDao userDao = getWriteUserDao(); userDao.deleteAll(); }
注意,这里只列出了一部分场景,具体使用还需要根据自己的需求添加、修改。
getWriteUserDao(),getReadUserDao()是两个很重要的方法,在greendao使用的过程中,都是通过生成的XXXDao类进行增删改查的操作。
在activity中的使用:
manager = DBManager.getInstance(this);
manager.deleteAll();
项目源码
- Android开源框架GreenDao3.0使用纪要
- Android ORM框架 GreenDao3.0的使用
- Android ORM框架greenDao3.0使用简介
- Android Greendao3.0框架的使用
- Android ORM框架 GreenDao3.0的使用
- GreenDao3.0框架使用详解
- android stdudio 数据库框架greendao3.2使用
- 开源框架greenDao的使用(二)-greenDao3
- Android之数据库框架greenDAO3.0使用指南
- Android之数据库框架greenDAO3.0使用指南
- 数据库框架GreenDao3.0
- Android Studio 简单使用 GreenDao3.0
- Android Studio 简单使用 GreenDao3.0
- Android Studio 配置使用GreenDao3.0
- android:kotlin语言使用greendao3.0简解
- Android 中GreenDao3.0简单使用
- Android框架之路——GreenDao3.2.2的使用
- Android GreenDao3.2.0使用
- Python使用spark时出現版本不同的错误
- socket通讯工具类
- ORACLE的char、nchar、varchar、varchar2、nvarchar2的区别
- redis安装配置
- 流星效果
- Android开源框架GreenDao3.0使用纪要
- 断点续传下载原理实现
- (转)在Fragment中OnActivityResult方法中接收Activity中返回的值
- Unity3D工程优化(2017版)
- java中有三种移位运算符
- 商城项目--全选,反选 vue2.x+JQ代码(俩种实现方式)
- Linux中Nginx的安装
- js校验身份证
- 目标检测几篇文章