GreenDAO 学习笔记-小白教程(一)GreenDAO的简介和基本使用

GreenDAO Github地址
GreenDAO 官方网站

介绍

GreenDAO是一个开源的Android端ORM(Object Relational Mapping 对象关系映射)框架,可以让用户使用Java方法来做增删改查等动作。

GreenDAO结构

使用

1. 添加gradle依赖

project的build.gradle文件中添加:

注意,以下的greendao请输入最新版本在这里可以查看最新版本

// In your root build.gradle file:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}

在具体的module的build.gradle文件中添加:

// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin

dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // add library
}

2. 设置数据库版本等信息

在module的build.gradle文件添加:

greendao {
    schemaVersion 1
}

schemaVersion的值表示数据库版本号。

另外,用户还可以设置daoPackage属性。

  • daoPackage表示通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名。

3. 编写实体类

@Entity
public class Player {
    @Id
    private Long id;
    @Unique
    private String name;
    private Integer age;
}

点击build后,AndroidStudio会自动生成这个类的其他部分:

@Entity
public class Player {
    @Id
    private Long id;
    @Unique
    private String name;
    private Integer age;
    @Generated(hash = 1461101279)
    public Player(Long id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    @Generated(hash = 30709322)
    public Player() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return this.age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

同时,AS会默认在GreenDAOLearn\app\build\generated\source\greendao\com\ysx\greendaolearn\entity目录下生成三个文件:

  • DaoMaster.java
  • DaoSession.java
  • PlayerDao.java

greendao_gen

由于我们在.gitignore中添加了build,则该目录下的文件不会放在git库中,这些代码每次build的时候都会重新生成。

实体类中常用的注解:
@Entity  表明这个实体类会在数据库中生成一个与之相对应的表。 
@Id  对应数据表中的 Id 字段,有了解数据库的话,是一条数据的唯一标识。 
@Property(nameInDb = “STUDENTNUM”)  表名这个属性对应数据表中的 STUDENTNUM 字段。 
@Property  可以自定义字段名,注意外键不能使用该属性 
@NotNull  该属性值不能为空 
@Transient  该属性不会被存入数据库中 
@Unique  表名该属性在数据库中只能有唯一值

4. 操作数据库

初始化数据库:
    /**
     * 数据库名称
     */
    private static final String DATABASE_NAME = "players.db";
    private DaoSession mDaoSession;
    /**
     * 初始化DaoSession
     * 即获取一个全局的DaoSession实例
     * // TODO: 2017/10/31 可以使用一个单例类单独管理这个对象
     */
    private void initDaoSession() {
        DaoMaster.OpenHelper openHelper = new DaoMaster.DevOpenHelper(
                mContext.getApplicationContext(), DATABASE_NAME, null);
        DaoMaster daoMaster = new DaoMaster(openHelper.getWritableDatabase());
        mDaoSession = daoMaster.newSession();
    }

全局保存一个DaoSession对象,用来对数据库进行操作。

    /**
     * 插入一条数据
     *
     * @param player
     */
    private void insertData(Player player) {
        PlayerDao playerDao = mDaoSession.getPlayerDao();
        playerDao.insert(player);
    }
    /**
     * 根据id删除一条数据
     *
     * @param id
     */
    private void deleteData(long id) {
        PlayerDao playerDao = mDaoSession.getPlayerDao();
        playerDao.deleteByKey(id);
    }
    /**
     * 更新一条数据
     * 更新年龄
     *
     * @param id
     * @param age
     */
    private void updateData(long id, int age) {
        Log.d(TAG, "updateData: id: " + id + ", age: " + age);
        PlayerDao playerDao = mDaoSession.getPlayerDao();
        Player player = playerDao.queryBuilder()
                .where(PlayerDao.Properties.Id.eq(id))
                .build()
                .unique();
        player.setAge(age);
        playerDao.update(player);
    }
    /**
     * 获取全部数据,按照Id升序排列
     *
     * @return 数据列表
     */
    private List<Player> getAllData() {
        PlayerDao playerDao = mDaoSession.getPlayerDao();
        return playerDao.queryBuilder()
                .orderAsc(PlayerDao.Properties.Id)
                .build()
                .list();
    }

混淆配置

-keep class org.greenrobot.greendao.**{*;}
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties

Demo源代码地址

参考

http://blog.csdn.net/zone_/article/details/69054997

http://blog.csdn.net/njweiyukun/article/details/51893092

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值