greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。
ormlite 基于注解和反射的的方式,导致ormlite性能有着一定的损失(注解其实也是利用了反射的原理) 优点:维护更方便,使用更简单,而且容易上手。(文档较全面,社区活跃) 缺点:基于反射,效率较低
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对象。(重点)
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
在dependencies节点下加入:compile 'org.greenrobot:greendao:3.0.1'
在gradle文件中加入:apply plugin: 'org.greenrobot.greendao'
@Entity (完成第一步后直接使用,代表是该映射关系中的Object对象)
public class User {
@Id
private Long id;
private String name;
private int age;
//下面省去了 setter/getter
}
greendao {
targetGenDir 'src/main/java'
}
我听过几个项目讲解视频以及看过几个项目代码,基本上他们对于数据库的部分的做法就是将数据库做成单利模式,
、
、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;
}
DaoSession session = daoMaster.newSession(); //
UserDao userDao = session.getUserDao(); //增删改查需要的前提就是这三行。 数据库操作对象
userDao.insert(user); //Long类型的返回值 //增加数据 参数:对应的实体类对象
userDao.insertInTx(uList); //插入整个集合 参数:对应的实体类对象集合
userDao.delete(user); //删除 参数:对应的实体类对象
userDao.update(user); //修改 参数:对应的实体类对象
QueryBuilder builder = userDao.queryBuilder(); //查询
List 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);