GreenDao 的基本使用
来源:互联网 发布:电脑没有usb打印端口 编辑:程序博客网 时间:2024/03/28 20:13
概念介绍:
greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。
与同类型的ormLite 比较:(扯再多没用,上数据图! 最下面)
ormlite 基于注解和反射的的方式,导致ormlite性能有着一定的损失(注解其实也是利用了反射的原理) 优点:维护更方便,使用更简单,而且容易上手。(文档较全面,社区活跃) 缺点:基于反射,效率较低
GreenDao
优点:
1):号称是Android 最快的关系型数据库。
2);内存占用小。
3):编译时间段,也就是运行操作时间短。
4):方便简单的操作方式。(API)
5):还可以支持加密操作。
6):能够让代码更加简洁。
7):效率很高,插入和更新的速度是sqlite的2倍,加载实体的速度是ormlite的4.5倍。
8):文件较小,占用更少的内存 ,但是需要create Dao,
9):操作实体灵活:支持get,update,delete等操作
缺点:
没有ORMLite那样封装的完整,正是基于不是反射,才使得其效率高的多。
发展:
3.0之前需要通过新建java工程生成数据对象(实体)和DAO对象,非常麻烦也增加使用成本。
3.0最大的变化就是采用注解的方式生成Java数据对象和dao对象。(重点)
Android studio使用方法:
(1) 工作空间gradle文件:
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
(2):App 的 gradle文件:
在dependencies节点下加入:compile 'org.greenrobot:greendao:3.0.1'在gradle文件中加入:apply plugin: 'org.greenrobot.greendao'
( 3) 实体类的操作:
@Entity (完成第一步后直接使用,代表是该映射关系中的Object对象)public class User { @Id private Long id; private String name; private int age; //下面省去了 setter/getter
}
(4) 表示GreenDao的创建路径 需要将这段加入在APP的gradle文件中。放在Android 节点外面。
greendao {targetGenDir 'src/main/java'
}
通过上面使用方式我们可以获取DaoMaster 、DaoSession、Dao类
我听过几个项目讲解视频以及看过几个项目代码,基本上他们对于数据库的部分的做法就是将数据库做成单利模式,
、
数据库单例
、public class DBManager { private final static String dbName = "test_db"; private static DBManager mInstance; private DaoMaster.DevOpenHelper openHelper; private Context context;
public DBManager(Context context) { this.context = context; openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);}/** * 获取单例引用 * * @param context * @return */public static DBManager getInstance(Context context) { if (mInstance == null) { synchronized (DBManager.class) { if (mInstance == null) { mInstance = new DBManager(context); } } } return mInstance;}
}
2.)获取可读可写数据库
可读数据库
获取可读数据库 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;}
实际操作:
DaoMaster daoMaster = new DaoMaster(db); //该参数是可读可写的数据库。创建底层数据库表的一些操作,但是建表语句是写在了UserDao层。
DaoSession session = daoMaster.newSession(); //UserDao userDao = session.getUserDao(); //增删改查需要的前提就是这三行。 数据库操作对象userDao.insert(user); //Long类型的返回值 //增加数据 参数:对应的实体类对象userDao.insertInTx(uList); //插入整个集合 参数:对应的实体类对象集合userDao.delete(user); //删除 参数:对应的实体类对象userDao.update(user); //修改 参数:对应的实体类对象QueryBuilder<User> builder = userDao.queryBuilder(); //查询List<User> users = builder.list(); //该方法是获取数据库查询获得到的对象集合
还可以写成一个工具类
package com.example.aquatic_logistics.model;import android.content.Context;import android.database.sqlite.SQLiteDatabase;public class DBManager { private final static String dbName = "test_db"; private static DBManager mInstance; private DaoMaster.DevOpenHelper openHelper; private Context context; public DBManager(Context context) { this.context = context; openHelper = new DaoMaster.DevOpenHelper(context, dbName, null); } /** * 获取单例引用 * * @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 UserDao getWriteUserDao() { DaoMaster daoMaster = new DaoMaster(getWritableDatabase()); DaoSession daoSession = daoMaster.newSession(); UserDao userDao = daoSession.getUserDao(); return userDao; } public UserDao getReadUserDao() { DaoMaster daoMaster = new DaoMaster(getReadableDatabase()); DaoSession daoSession = daoMaster.newSession(); UserDao userDao = daoSession.getUserDao(); return userDao; } public CollecyUserDao getWriteMyCollectDao() { DaoMaster daoMaster = new DaoMaster(getWritableDatabase()); DaoSession daoSession = daoMaster.newSession(); CollecyUserDao myCollectDao = daoSession.getCollecyUserDao(); return myCollectDao; } public CollecyUserDao getReadMyCollectDao() { DaoMaster daoMaster = new DaoMaster(getReadableDatabase()); DaoSession daoSession = daoMaster.newSession(); CollecyUserDao myCollectDao = daoSession.getCollecyUserDao(); return myCollectDao; }}工具类的使用
添加
CollecyUser collecyUser=new CollecyUser(Long.parseLong(bean.getId()),bean.getMmsi(),box.isChecked(),bean.getName());DBManager.getInstance(getActivity().getApplicationContext()).getWriteMyCollectDao().insert(collecyUser);删除
CollecyUser collecyUser=new CollecyUser(Long.parseLong(bean.getId()),bean.getMmsi(),box.isChecked(),bean.getName());DBManager.getInstance(getActivity().getApplicationContext()).getWriteMyCollectDao().delete(collecyUser);
对比数据 (看完数据,你还有什么理由不选择GreenDao ?)
- GreenDao 的基本使用
- greenDao的基本使用
- greenDao的基本使用
- GreenDao的基本使用
- greenDao的基本使用
- GreenDAO的使用基本篇
- GreenDao 3.2.0 的基本使用
- GreenDao 3.2.0 的基本使用
- GreenDao 3.2.0 的基本使用
- GreenDao 3.2.0 的基本使用
- Android数据库之greendao的基本使用
- greenDao的基本使用及用法详解
- GreenDao 3.2.0 的基本使用教程
- GreenDao 3.2.0 的基本使用
- GreenDao的基本使用及实例
- GreenDao的基本使用(android数据库)
- GreenDao 基本使用
- greenDao--3.2基本使用
- 非常简单实现可折叠textview并带有省略号
- JDK源码学习之Arraylist与LinkedList
- 关于jQuery EasyUI 中刷新Tab选项卡 后一个页面变形的问题的解决方法
- IOS GCD
- Json解析之动态key和key为关键字问题(JAVA初级)
- GreenDao 的基本使用
- IE兼容性问题(一)
- maven +jfinal +bettl 整合
- 题意就是让我们找一个数只能有三个约数,很明显素数有两个,那么容易找到规律,这个数只能有着三个约数。1和自己还有sqrt(n)。sqrt(n)自然要是素数
- linux usb枚举过程分析【host】
- javax.servlet.ServletException 找不到
- Linux系统进程相关的命令
- Thread相关基础
- 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。