GreenDao框架入门及基础使用(Android studio 完整配置)
2017-06-12 14:06
656 查看
GreenDao框架入门及基础使用(Android studio 完整配置)
一、初识GreenDao框架
GreenDao是一款ORM(object/relational mapping 对象关系映射)框架。是目前普片认为从实用性,高效性,方便性等各方面公认最好的一款轻量级ORM框架。 之前类似的框架(具有ORM模块功能)的又ormlite,xUtil等等类似框架。
GreenDao的官网:http://greenrobot.org/greendao/
GreenDao的下载地址:https://github.com/greenrobot/greenDAO
二、GreenDao在程序代码中做哪一个层面的东西。
首先,GreenDao是一个ORM框架,那么什么是ORM? ORM是对象关系映射,那什么是对象(Object),什么是关系(Relational)?对象就是Java对象(不多解释,如果什么是java对象都不知道,就先去学习Java基础),关系就是数据库中的二维表,在数据库中的二维表也叫做关系。对象关系映射,就是java对象和数据库中的表进行一一对应,使用一个java对象去表示一个数据库的表。所以GreenDao就是一个将SQLite数据库和Java Object对象进行关联的框架。 那么就是说,GreenDao主要用在数据持久层,就是操作数据库(库,表,数据)的一系列(CRUD)增删改查的封装,它就是一款让我们能在代码中快速建表,查数据,更新删除数据,更新表等的工具。
三、GreenDao在项目中的完整使用配置。
本文章中完全基于gradle配置搭建,网上有些关于这方面的文章,写了要创建一个module,还要创建一个java module或是java 类来创建生成 greendao相关辅助类等,这样个人感觉有点太麻烦。
1.创建Demo Module。
我们将greendao相关代码放置在src\main目录下,即java源码同级目录,新建java-gen,如
此时java-gen只是一个目录,并非源码目录,区别于java蓝色文件夹图标,所以在gradle文件中的android 节点下加上如下代码,同步gradle文件即可
sourceSets { main{ java.srcDirs = ['src/main/java', 'src/main/java-gen'] } }
2.应用依赖库和插件。
打开module的设置页面,搜索greendao如图添加依赖,对应红色方框的两个jar:
同时在gradle文件顶部,第一行下面加入以下开码:
apply plugin: 'org.greenrobot.greendao' buildscript { repositories { mavenCentral() } dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' } } greendao { schemaVersion 1 daoPackage 'com.frosty.dao' targetGenDir 'src/main/java-gen' }
说明:schemaVersion -->数据库版本,今后数据库升级用到;daoPackage --> green到自动生成的dao模型位置的包名。 至此,greendao完整配置已经完成!但此时你同步后发现java-gen目录下还是什么都没有 原因是greendao会根据你整映程目录下的注有@Entity的类去实现orm映射,才去生成相关的辅助类。
四、编写你的实体类
我们在java-gen目录新建存放实体的包名,并创建一个Teacher实体实体代码如下:
@Entity public class Teacher { @Id(autoincrement = true) private Long id; @Property(nameInDb = "USERNAME") private String name; @NotNull private int age; @Transient private int flag; @Generated public Teacher() { } @Generated public Teacher(Long id, String name, int age) { this.id = id; this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
五、Build Make,生成对应Dao
写好此实体类后,在gradle文件中确定好生成的dao目录,然后Sync然后Build中Make一下即可生成对应的dao
我们点开DaoMaster或者DaoSession,你会发现这个注解
所以问题来了,那么不让我们修改这些个类,如何使用使用或者扩展他们?
六、 封装你的数据库工具类
在如4000
图目录新建db目录,用于存放你的工具类,注意这里我们以后在实际应用中,需要新增实体时候,规则和Teacher一样,Make后会自动在dao目录下生成对应的xxDao,同时会自动更新Dao下的DaoMaster类。
我们创建DaoManager类,用于数据库相关实例的获取或维护,借助这个类创建或者管理数据库,关闭连接等操作,完整代码如下:
/** * Created by Frosty on 2017/6/7. */ public class DaoManager { //TAG public static final String TAG = DaoManager.class.getSimpleName(); //上下文 private static Context mContext; //数据库名称 private static final String DB_NAME = "wincloud.db"; //多线程访问 private volatile static DaoManager manager; //操作类 private static DaoMaster.DevOpenHelper helper; //核心类 private static DaoMaster daoMaster; private DaoSession daoSession; private SQLiteDatabase db; /*单例模式*/ private DaoManager(){} private static class DaoManagerFactory{ static DaoManager daoManager = new DaoManager(); } public static DaoManager getInstance(Context context){ if(mContext==null) mContext= context; return DaoManagerFactory.daoManager; } /** * 判断是否存在数据库,如果没有则创建 * * @return */ public DaoMaster getDaoMaster(){ if(null == daoMaster){ helper = new DaoMaster.DevOpenHelper(mContext,DB_NAME,null); db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db); } return daoMaster; } /** * 完成对数据库的操作,只是个接口 * 中间件提供 * @return */ public DaoSession getDaoSession(){ if(null == daoSession){ if(null == daoMaster){ daoMaster = getDaoMaster(); } daoSession = daoMaster.newSession(); } return daoSession; } /** * 获取数据库 * @return */ public SQLiteDatabase getDatabase(){ return db; } /** * 打开输出日志,默认关闭 */ public void setDebug(){ QueryBuilder.LOG_SQL = true; QueryBuilder.LOG_VALUES = true; } /** * 关闭DaoSession */ public void closeDaoSession(){ if(null!=daoSession){ daoSession.clear(); daoSession = null; } } /** * 关闭Helper */ public void closeHelper(){ if(helper != null){ helper.close(); helper = null; } } /** * 关闭所有的操作 */ public void closeConnection(){ closeHelper(); closeDaoSession(); } }
同时我们创建DBUtils类,用于模型数据到数据库的操作对接,例如增、删、改、查等具体操作,以下代码仅提供样例,根据Teacher模型数据来操作。完整代码如下:
/** Created by Frosty on 2017/6/7. */ public class DBUtils { private DaoManager daoManager; private static Context mContext; /*单利*/ private DBUtils(){ daoManager = DaoManager.getInstance(mContext); } private static class DBUtilsFactory{ static DBUtils dbUtils = new DBUtils(); } public static DBUtils getInstance(Context context){ if(mContext==null) mContext = context; return DBUtilsFactory.dbUtils; } /** * 对数据库中Teacher表的插入操作 * @param Teacher * @return */ public boolean insertTeacher(Teacher Teacher) { boolean flag = false; flag = daoManager.getDaoSession().insert(Teacher) != -1 ? true : false; return flag; } /** * 批量插入 * * @param Teachers * @return */ public boolean inserMultTeacher(final List<Teacher> Teachers) { //标识 boolean flag = false; try { //插入操作耗时 daoManager.getDaoSession().runInTx(new Runnable() { @Override public void run() { for (Teacher Teacher : Teachers) { daoManager.getDaoSession().insertOrReplace(Teacher); } } }); flag = true; } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 修改 * @param Teacher * @return */ public boolean updateTeacher(Teacher Teacher){ boolean flag = false; try{ daoManager.getDaoSession().update(Teacher); flag = true; }catch (Exception e){ e.printStackTrace(); } return flag; } /** * 删除 * * @param Teacher * @return */ public boolean deleteTeacher(Teacher Teacher) { boolean flag = false; try { //删除指定ID daoManager.getDaoSession().delete(Teacher); flag = true; } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 查询单条 * * @param key * @return */ public Teacher listOneTeacher(long key) { return daoManager.getDaoSession().load(Teacher.class, key); } /** * 全部查询 * * @return */ public List<Teacher> listAll() { return daoManager.getDaoSession().loadAll(Teacher.class); } /** * 原生查询 */ public void queryNative() { //查询条件 String where = "where name like ? and _id > ?"; //使用sql进行查询 List<Teacher> list = daoManager.getDaoSession().queryRaw(Teacher.class, where, new String[]{"%l%", "6"}); }elass); //查询年龄大于19的李四 List<Teacher> list = queryBuilder.where(Teacher Dao.Properties.Age.ge(19)).where(TeacherDao.Properties.Name.like("李四")).list(); } }
七、 使用工具类
很简单,获取DBUtil单例,直接调用对应方法即可,如图:结束语:本文章copy代码的时候高亮代码看着可能有点紊乱,代码可以直接copy到你的类中,引入对于包即可,源码下载
相关文章推荐
- 关于GreenDao数据库框架在android studio上的相关配置和使用
- Android Studio配置greenDao框架详解--说说那些坑
- Android Studio配置GreenDAO 3.2.0和使用方法
- Android Studio配置GreenDAO 3.2.0和使用方法
- 【Android】ORM数据库框架之GreenDao快速入门与使用
- GreenDao 在 Android Studio 中的配置使用 之 更新数据库
- Android Studio配置与使用GSON框架解析json数据
- Android GreenDao数据库框架使用
- 从框架到完整项目搭建,实战项目《约个球》(7)- 将项目迁移到android studio,使用gradle搭建android项目(上)
- GreenDao框架使用教程
- Android greendao配置及使用
- Android Studio 配置使用注解框架AndroidAnnotations
- Android基础入门教程——1.2.2 使用Android Studio开发Android APP
- GreenDao的简单使用说明(一)android studio中引入GreenDao
- linux 入门 - 双系统的安装&JDK环境配置&Android Studio 的安装使用
- 快速入门GreenDao框架并实现增删改查案例
- 使用ORM数据库框架greenDao
- Android游戏开发框架Libgdx的使用(一)--Libgdx基础入门
- Android基础入门教程——1.2.2 使用Android Studio开发Android APP
- Laravel php 框架的使用写出第一个hello world,Laravel 入门配置