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

来源:互联网 发布:淘宝店上货模板 编辑:程序博客网 时间:2024/04/25 18:51

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 plugindependencies {    compile 'org.greenrobot:greendao:3.2.2' // add library}

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

在module的build.gradle文件添加:

greendao {    schemaVersion 1}

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

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

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

3. 编写实体类

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

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

@Entitypublic 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

原创粉丝点击