GreenDao 的基本使用

概念介绍:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值