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'

image

(2):App 的 gradle文件:
dependencies节点下加入:compile 'org.greenrobot:greendao:3.0.1'在gradle文件中加入:apply plugin: 'org.greenrobot.greendao'

image

( 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(); //该方法是获取数据库查询获得到的对象集合

image还可以写成一个工具类

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 ?)
0 0