Android GreenDao3.2.0数据库框架的简单实用

目前实用的数据库框架有四种,都列出来方便下载重温
一:OrmLite
优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。缺点:1.基于反射,效率比较低
jar包 地址:http://ormlite.com/releases/
集成方法:把jar包复制到as的libs文件夹下,并且引用jar包即可

二:LitePal
郭霖大神写的,我目前使用这个。下面提供下载和集成的方式
git 地址:https://github.com/LitePalFramework/LitePal
集成方法:compile ‘org.litepal.android:core:1.5.0’

三:GreenDao3.2(目前的主流数据库框架)
1.存取速度快; 2.支持数据库加密; 3.轻量级; 4.激活实体; 5.支持缓存; 6.代码自动生成
git 地址:https://github.com/greenrobot/greenDAO
集成方法: compile ‘org.greenrobot:greendao:3.2.0’
用于学习的相关博客:
http://www.open-open.com/lib/view/open1484706351512.html //简单使用
https://blog.csdn.net/speedystone/article/details/74193053 //进阶篇

在这里记录一下 GreenDao3.2.0的简单使用

一:配置GreenDao3.2.0
1.在project 的build.gradle中添加依赖,如下

dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        //GreenDao3依赖
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

2.在app moudle的build.gradle中导入相关的jar包如下
//greendao依赖
compile ‘org.greenrobot:greendao:3.2.0’

3.在app moudle的build.gradle中配置数据库的相关信息(和defaultConfig同一级)
/greendao配置/
greendao {
/版本号,升级时可配置/
schemaVersion 1
}
配置完后 会出现错误 这时候需要在moudle 的build.gradle顶部加上

apply plugin: 'org.greenrobot.greendao'

这时就已经配置好了GreenDao了。接下来就是我们如何去使用他了

———————————————————–使用方法—————————————————————
一.创建一个javabean来作为一张表的数据 假如是用户的登录信息

@Entity
public class Shop {
    @Id(autoincrement = true)
    private Long id;
    @Unique
    //用户昵称
    @Property
    //年龄
    private int age;
    //头像url
    private String head_url;
    //用户地址
    private String address;
    private int type;
    }

这里需要注意的是,创建完成之后,需要build gradle来完成我们的代码自动生成。其中生成的代码包含有
Bean实体的构造方法和get、set方法 2. DaoMaster、DaoSession、DAOS类,我们只需要点击下面图标即可
这里写图片描述
部分studio升级到了3.1后点击下方的按钮即可
这里写图片描述
所以当出现DaoMaster 和DaoSession找不到的时候,就是因为没有先创建一个bean,然后自动生成相关代码.
下面是对Bean对象的注释进行解释

@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作

@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值

@Property:可以自定义字段名,注意外键不能使用该属性

@Unique:该属性值必须在数据库中是唯一值

@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改

@NotNull:属性不能为空

@Transient:使用该注释的属性不会被存入数据库的字段中

二:创建数据库名称(我一般在application中创建)

 //数据库配置
        DaoMaster.DevOpenHelper helper=new DaoMaster.DevOpenHelper(this,"user.db",null);
        SQLiteDatabase db=helper.getWritableDatabase();
        //获取数据库对象
        DaoMaster daoMaster = new DaoMaster(db);
        //获取Dao对象管理者
        daoSession = daoMaster.newSession();

介绍一下相关api
DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现

DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表

DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API

由于我们已经创建好了DaoSession和User的Bean对象,编译后会自动生成我们的UserDao对象,可通过DaoSession获得

UserDao dao = daoSession.getUserDao();

GreenDao增删改查

 /**
     * 添加数据,如果有重复则覆盖
     *
     * @param User
     */
    public static void insertUser(User user) {
        BaseApplication.getDaoInstant().getUserDao().insertOrReplace(user);
    }

    /**
     * 删除数据
     *
     * @param id
     */
    public static void deleteUser(long id) {
        BaseApplication.getDaoInstant().getUserDao().deleteByKey(id);
    }

    /**
     * 更新数据
     *
     * @param shop
     */
    public static void updateLove(User user) {
        BaseApplication.getDaoInstant().getUserDao().update(user);
    }

    /**
     * 查询条件为Type=TYPE_LOVE的数据
     *
     * @return
     */
    public static List queryUser() {
        return BaseApplication.getDaoInstant().getUserDao().queryBuilder().where(UserDao.Properties.Type.eq(User.TYPE_LOVE)).list();
    }

    /**
     * 查询全部数据
     */
    public static List queryAll() {
        return BaseApplication.getDaoInstant().getUserDao().loadAll();
    }

下面是常使用的api

增加单个数据

getUserDao().insert(user);

getUserDao().insertOrReplace(user);

增加多个数据

getUserDao().insertInTx(userList);

getUserDao().insertOrReplaceInTx(userList);

查询全部

List< user> list = getUserDao().loadAll();

List< user> list = getUserDao().queryBuilder().list();

查询附加单个条件

.where()

.whereOr()

查询附加多个条件

.where(, , ,)

.whereOr(, , ,)

查询附加排序

.orderDesc()

.orderAsc()

查询限制当页个数

.limit()

查询总个数

.count()

修改单个数据

getUserDao().update(shop);

修改多个数据

getUserDao().updateInTx(shopList);

删除单个数据

getTABUserDao().delete(user);

删除多个数据

getUserDao().deleteInTx(userList);

删除数据ByKey

getTABUserDao().deleteByKey();

你可能感兴趣的:(进击的小胖子)