美文网首页
03 | Android 项目笔记 greenDAO的使用

03 | Android 项目笔记 greenDAO的使用

作者: itkluo88 | 来源:发表于2018-08-18 12:14 被阅读9次

    我们项目还在用xutil的DB, 感觉太low了, 所以换成greenDAO,下面简单记录下使用步骤。

    1. 配置Gradle
      1-1. 工程目录下build.gradle
      添加GreenDao插件支持
      ···
      buildscript {

      repositories {
      google()
      jcenter()
      }
      dependencies {
      classpath 'com.android.tools.build:gradle:3.0.1'
      classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0' // 添加插件 更好支持GreenDao
      }
      }

    allprojects {
    repositories {
    google()
    jcenter()
    }
    }

    task clean(type: Delete) {
    delete rootProject.buildDir
    }
    ···

    1-2. 项目下的build.gradle

    apply plugin: 'com.android.application'
    apply plugin: 'org.greenrobot.greendao' // 添加应用依赖插件
    
    android {
       // 省略内容.....
    }
    
    greendao {
        //数据库的schema版本,也可以理解为数据库版本号.  如果更改了实体/数据库模式,则必须增加该值。默认为1
        schemaVersion 1
        //生成DaoMaster、DaoSession、Dao的包名,也就是要放置这些类的包的全路径。
        daoPackage 'com.itkluo.greendaodemo.greendao'
        //生成DaoMaster、DaoSession、Dao的目录, 默认为构建目录 (build/generated/source/greendao)
        targetGenDir 'src/main/java'
    //    generateTests false //设置为true以自动生成单元测试
    //    targetGenDirTests //存储生成的单元测试的基本目录。默认为 src/androidTest/java。
    }
    
    dependencies {
        compile 'org.greenrobot:greendao:3.2.0' //添加库文件
         // 省略内容.....
    }
    

    好了, greenDao的基本配置就完成了, 接下来实际去感受下greenDao的强大方便吧~

    1. 开始愉快的使用吧
      2-1.首先编写一个实体类

    可以理解为实体类和表就是一种映射
    ···
    @Entity
    public class UserInfo implements Serializable {
    private static final long serialVersionUID = 6299300192544739072L;
    // @Id(autoincrement = true)
    // public Long id;
    @Id
    public Long user_id;
    public String username;
    public String mobile;

    @Transient
    public int loginCount;
    }
    ···
    就定义了一个UserInfo 对象, 还多了几个注解@Entity,@Id以及@Transient

    @Entity注解 让greenDao根据实体类去生成相应的Dao, 就相当于实体类和表做了映射关联
    @Id注解 选择long / Long属性作为实体ID。相当表里的ID是同个概念。可设置数autoincrement ID值不断增加的标志自增长不重复, 获取自己生成一个唯一id, 如上以user_id为主键
    @Transient注解 标记的字段不会作为表字段, 可以作为实体类中临时用的字段

    编译项目,生成Dao相关文件~

    图片.png

    编译之后发现多了一下代码

    图片.png

    这里生成的就是上面我们配置的路径


    图片.png

    2-2 写代码使用
    获得UserInfoDao,对于刚建立的表关系, 就是通过这个UserInfoDao去做操作
    ···
    DaoMaster.DevOpenHelper mDevOpenHelper = new DaoMaster.DevOpenHelper(context, demo.db);
    DaoMaster mDaoMaster = new DaoMaster(helper.getWritableDatabase());
    DaoSession mDaoSession= getDaoMaster(context).newSession();
    UserInfoDao mUserInfoDao=mDaoSession.getUserInfoDao();
    ···

    增加数据
    ···
    public void addUserInfo(final UserInfo userInfo) {
    if (mUserInfoDao != null) {
    if (userInfo != null) {
    long result = mUserInfoDao.insertOrReplace(userInfo);
    LogUtil.d(TAG, "userInfo result: " + result);
    }
    }
    }
    ···

    查询数据
    ···
    public UserInfo getUserInfoByID(long myUserId) {
    try {
    if (mUserInfoDao != null) {
    return mUserInfoDao.queryBuilder().where(UserInfoDao.Properties.User_id.eq(myUserId)).build().unique();
    } else {
    return null;
    }
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }
    ···

    删除数据
    ···
    public void deleteAllUserInfo(final long myUserId) {
    if (mUserInfoDao != null) {
    mUserInfoDao.deleteByKey(myUserId);
    }
    }
    ···

    好了, 就记录一些简单的操作, 还有排序,分页等表操作可查看api。
    具体看示例demo中把创建DAO, 异步查询和返回做了封装,还可修改DB存储路径, 数据的升级迁移

    源码 https://github.com/kluo88/GreenDaoDemo

    相关文章

      网友评论

          本文标题:03 | Android 项目笔记 greenDAO的使用

          本文链接:https://www.haomeiwen.com/subject/phoxiftx.html