GreenDao 3.2 入门配置以及简单使用

相关资料

GreenDao 官网:http://greenrobot.org/greendao/
GreenDao 特征介绍:http://greenrobot.org/greendao/features/
GreenDao 学习文档:http://greenrobot.org/greendao/documentation/
GreenDao 更新日志:http://greenrobot.org/greendao/changelog/
GreenDao GitHub地址:https://github.com/greenrobot/greenDAO

GreenDao优点:

1.性能高,号称Android最快的关系型数据库,存取速度快
2.内存占用小
3.库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
4.支持数据库加密 greendao支持SQLCipher进行数据库加密
5.激活实体,支持缓存,代码自动生成。

1.在build中添加配置如下:

projet 目录下的build.gradle

        dependencies{
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
        }   

2.moudle 下的build.gradle添加如下内容:

第一行添加插件:

    apply plugin: 'org.greenrobot.greendao'

3.添加依赖

dependencies {
.......
implementation 'org.greenrobot:greendao:3.2.0' // add library
implementation 'org.greenrobot:greendao-generator:3.2.0'
}

//添加好后sync一下工程

4.根目录下添加

//配置数据库,配置版本号即可,其他的只需要保持默认
    greendao {
        //数据库版本号
        schemaVersion 1
        //数据库所在包
        daoPackage 'cn.dapchina.manager.rxjava.db'
        //生成的数据库文件的目录
        targetGenDir 'src/main/java'
        //自动生成单元测试
    //    generateTests true
        //生成的单元测试目录
    //    targetGenDirTests
    }

5.新建实体类

@Entity
public class Student {
    @Id
    private Long id;
    private String name;
    private int age;
    private String num;
}

6.然后点击 android studio 的 build-->make project

7.新建DbManager 类

/**
 * @author EraJieZhang
 * @data 2018年11月17日
 * 数据库工具类
 */
public class DbManager {

    // 是否加密
    public static final boolean ENCRYPTED = true;
   //数据库名称
    private static final String DB_NAME = "test.db";
    private static DbManager mDbManager;
    private static DaoMaster.DevOpenHelper mDevOpenHelper;
    private static DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;

    private Context mContext;

    private DbManager(Context context) {
        this.mContext = context;
        // 初始化数据库信息
        mDevOpenHelper = new DaoMaster.DevOpenHelper(context, DB_NAME);
        getDaoMaster(context);
        getDaoSession(context);
    }

    public static DbManager getInstance(Context context) {
        if (null == mDbManager) {
            synchronized (DbManager.class) {
                if (null == mDbManager) {
                    mDbManager = new DbManager(context);
                }
            }
        }
        return mDbManager;
    }

    /**
     * 获取可读数据库
     *
     * @param context
     * @return
     */
    public static SQLiteDatabase getReadableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }
        return mDevOpenHelper.getReadableDatabase();
    }

    /**
     * 获取可写数据库
     *
     * @param context
     * @return
     */
    public static SQLiteDatabase getWritableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }

        return mDevOpenHelper.getWritableDatabase();
    }

    /**
     * 获取DaoMaster
     *
     * @param context
     * @return
     */
    public static DaoMaster getDaoMaster(Context context) {
        if (null == mDaoMaster) {
            synchronized (DbManager.class) {
                if (null == mDaoMaster) {
                    mDaoMaster = new DaoMaster(getWritableDatabase(context));
                }
            }
        }
        return mDaoMaster;
    }

    /**
     * 获取DaoSession
     *
     * @param context
     * @return
     */
    public static DaoSession getDaoSession(Context context) {
        if (null == mDaoSession) {
            synchronized (DbManager.class) {
                mDaoSession = getDaoMaster(context).newSession();
            }
        }
        return mDaoSession;
    }
}

8.根据StudentDaoOpe修改自己需要的增删改查语句

/**
 * @author EraJieZhang
 * @data 2018年11月17日
 * 学生表工具类
 */
public class StudentDaoOpe {


    /**
     * 将数据实体通过事务添加至数据库
     *
     * @param context
     * @param list
     */
    public static void insertData(Context context, List list) {
        if (null == list || list.size() <= 0) {
            return;
        }
        DbManager.getDaoSession(context).getStudentDao().insertInTx(list);
    }
    /**
     * 添加数据至数据库,如果存在,将原来的数据覆盖
     * 内部代码判断了如果存在就update(entity);不存在就insert(entity);
     *
     * @param context
     * @param student
     */
    public static void saveData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().save(student);
    }
    /**
     * 删除数据至数据库
     *
     * @param context
     * @param student 删除具体内容(根据bean删除数据)
     */
    public static void deleteData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().delete(student);
    }
    /**
     * 根据id删除数据至数据库
     *
     * @param context
     * @param id      删除具体内容的id
     */
    public static void deleteByKeyData(Context context, long id) {
        DbManager.getDaoSession(context).getStudentDao().deleteByKey(id);
    }
    /**
     * 删除全部数据
     *
     * @param context
     */
    public static void deleteAllData(Context context) {
        DbManager.getDaoSession(context).getStudentDao().deleteAll();
    }

    /**
     根据参数删除对应姓名的数据
     @param context
     @param w    删除的条件封装{WhereCondition w = StudentDao.Properties.Name.like("EraJieZhnang");}
     */
    public static void deleteDataName(Context context,WhereCondition w) {
        DbManager.getDaoSession(context).getStudentDao().queryBuilder().where(w).
                buildDelete().
                executeDeleteWithoutDetachingEntities();
    }
    /**
     * 更新数据库
     *
     * @param context
     * @param student
     */
    public static void updateData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().update(student);
    }
    /**
     * 查询所有数据
     *
     * @param context
     * @return
     */
    public static List queryAll(Context context) {
        QueryBuilder builder = DbManager.getDaoSession(context).getStudentDao().queryBuilder();

        return builder.build().list();
    }

    /**
     查询指定数据
     @param context
     @param where   whera条件{@"where _id = ?"}
     @param selectionArg    条件里“?”对应的参数 arraylist就行
     @return
     */
    public static List queryAppoint(Context context,String where,Collection selectionArg) {

        Query builder =  DbManager.getDaoSession(context).getStudentDao().
                queryRawCreateListArgs(where,selectionArg);

        return builder.list();
    }



    /**
     *  分页加载
     * @param context
     * @param pageSize 当前第几页(程序中动态修改pageSize的值即可)
     * @param pageNum  每页显示多少个
     * @return
     */
    public static List queryPaging( int pageSize, int pageNum,Context context){
        StudentDao studentDao = DbManager.getDaoSession(context).getStudentDao();
        List listMsg = studentDao.queryBuilder()
                .offset(pageSize * pageNum).limit(pageNum).list();
        return listMsg;
    }
}







你可能感兴趣的:(GreenDao 3.2 入门配置以及简单使用)