欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-20 14:51:32
...

GreenDAO Github地址
GreenDAO 官方网站

介绍

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

GreenDAO 学习笔记-小白教程(一)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 学习笔记-小白教程(一)GreenDAO的简介和基本使用

由于我们在.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

相关标签: android greendao