Android GreenDao使用教程3.2.2

来源:互联网 发布:杰刚队长 知乎 编辑:程序博客网 时间:2024/04/23 20:19

一、Greendao简介


     Greendao是一款用于数据库创建与管理的框架,由于原生SQLite语言比较复杂繁琐,使得不少程序员不得不去学习SQLite原生语言,但是学习成本高,效率低下,所以不少公司致力于开发一款简单的数据库管理框架,较为著名的就有Greendao和ORMLite,但是就数据分析来看,Greendao的效率是高于ORMLite及其他框架的,是目前该行业的领先者。也因为Greendao的使用方法简便,且效率高使得其成为目前使用最为广泛的数据库管理框架,这也是广大程序员的福音。


二、Greendao的使用方法


1.添加依赖


 在bulid.gradle文件下的dependencies下添加所需依赖

compile 'org.greenrobot:greendao:3.2.2' // add librarycompile 'org.greenrobot:greendao-generator:3.2.2'

2.在bulid.gradle下进行配置


apply plugin: 'org.greenrobot.greendao'buildscript {    repositories {        mavenCentral()    }    dependencies {        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'    }}

3.对greendao的generator生成文件进行配置


greendao {    schemaVersion 1  //版本    daoPackage '生成文件包名' // 一般为app包名+生成文件的文件夹名    targetGenDir 'src/main/java' //生成文件路径}


4.创建实体类,生成dao文件


@Entitypublic class dayStep {    @Id    private long id;    private String date;    private int step;}

注意:编写完实体类以后在实体类界面下按下Ctrl+F9(Make project),程序会自动编译生成dao文件,生成的文件一共有三个。


Greendao生成文件


5.使用Greendao


(1)创建一个application类,在application中完成DaoSession的初始化,避免以后重复初始化,便于使用。

 public class MyApplication extends Application {        public static MyApplication instances;    @Override    public void onCreate() {        super.onCreate();        instances = this;        setDatabase();    }    public static MyApplication getInstances(){        return instances;    }    /**     * 设置greenDao     */    private void setDatabase() {        // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。        // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。        // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。        // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。        mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null);//第二项为数据库名称,自己取        db = mHelper.getWritableDatabase();        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。        mDaoMaster = new DaoMaster(db);        mDaoSession = mDaoMaster.newSession();    }    public DaoSession getDaoSession() {        return mDaoSession;    }    public SQLiteDatabase getDb() {        return db;    }}


(2)Greendao操作数据库文件(增,删,改,查)

  /**     * 增     */    public void insert()    {        String date = new Date().toString();        mDayStep = new dayStep(null,date,0);//第一个是id值,因为是自增长所以不用传入        dao.insert(mDayStep);    }    /**     * 查     */    public void Search()    {        //方法一        List<dayStep> mDayStep = dao.loadAll();        //方法二        //List<dayStep> mDayStep = dao.queryBuilder().list();        //方法三 惰性加载        //List<dayStep> mDayStep = dao.queryBuilder().listLazy();        for (int i = 0; i < mDayStep.size(); i++) {            String date = "";            date = mDayStep.get(i).getDate();            Log.d("cc", "id:  "+i+"date:  "+date);        }    }    /**     * 删     * @param i 删除数据的id     */    public void delete(long i)    {        dao.deleteByKey(i);        //当然Greendao还提供了其他的删除方法,只是传值不同而已    }    /**     *改     * @param i     * @param date     */    public void correct(long i,String date)    {        mDayStep =  new dayStep((long) i,date,0);        dao.update(mDayStep);    }

三、Greendao注解含义


(1)@Entity 实体标识
     @nameInDb 在数据库中的名字,如不写则为实体中类名
     @indexes 索引
     @createInDb 是否创建表,默认为true,false时不创建
     @schema 指定架构名称为实体
     @active 无论是更新生成都刷新
(2)@Id 每条数据对应的位置,必写项
(3)@Property(nameInDb = "") 表示该属性将作为表的一个字段,其中nameInDb属性值是在数据库中对应的字段名称,可以自定义字段名,例如可以定一个跟实体对象字段不一样的字段名
(4)@NotNull 不为null
(5)@Unique 唯一约束   该属性值必须在数据库中是唯一值
(6)@ToMany 一对多
(7)@OrderBy 排序
(8)@ToOne 一对一 关系表
(9)@Transient 不保存于数据库
(10)@generated 由greendao产生的构造函数或方法


四、Greendao特性


  • 精简
  • 高效率
  • 低功耗
  • 使用方便