相关资料
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<Student> 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<Student> queryAll(Context context) {
QueryBuilder<Student> builder = DbManager.getDaoSession(context).getStudentDao().queryBuilder();
return builder.build().list();
}
/**
查询指定数据
@param context
@param where whera条件{@"where _id = ?"}
@param selectionArg 条件里“?”对应的参数 arraylist就行
@return
*/
public static List<Student> queryAppoint(Context context,String where,Collection<Object> selectionArg) {
Query<Student> builder = DbManager.getDaoSession(context).getStudentDao().
queryRawCreateListArgs(where,selectionArg);
return builder.list();
}
/**
* 分页加载
* @param context
* @param pageSize 当前第几页(程序中动态修改pageSize的值即可)
* @param pageNum 每页显示多少个
* @return
*/
public static List<Student> queryPaging( int pageSize, int pageNum,Context context){
StudentDao studentDao = DbManager.getDaoSession(context).getStudentDao();
List<Student> listMsg = studentDao.queryBuilder()
.offset(pageSize * pageNum).limit(pageNum).list();
return listMsg;
}
}
网友评论