Android数据库ORM框架-greenDAO

上一篇讲了SQLite在Android Framework层的实现流程-->SQLiteDatabase,但是在真正项目中去使用的时候就会发现不是很实用,没有像

SSH框架中使用数据库那么的方便,只需要操作对应表的dao类。至此就有了greenDAO一个基于ORM实现的数据库操作工具。

一、怎么使用greenDAO。

 在完全没有看greenDAO的时候,通过前面的两篇文章了解了数据库的调用流程,大概猜测了一下greenDAO的实现逻辑,ORM是对象关系映射,假如自己实现的话就是将数据库中表的结构转化成java类,然后通过一些关系表将java类和数据库操作关联起来,这样只需要对java类操作就好了。前面这些纯属自己YY的,多想想也是对之前知识点的复习。好了开始正式的来看greenDAO的使用。

Android数据库ORM框架-greenDAO_第1张图片
GitHub地址:https://github.com/greenrobot/greenDAO

1、生成映射类

    greenDAO 3.0之前的版本是需要新建java工程来将表结构对应的java类来生成的DaoMaster和DaoSession以及对应表的XXDao,3.0通过注解的方式生成类和表的关系映射。
如果是AndroidStudio的话,右键项目-->new --> module --> Java Library 项目名字greenDAOGenerator, 通过新建一个module来放生成工具类。在java工程中新建一个类
来生成对应的关系类。当前的java module 须添加两个jar包 freemarker-2.3.10(根据模板输出内容用的)、greendao-generator-1.3.1.jar(生成关系映射的)。
public static void main(String[] args){
        //数据库版本号, 生成的代码包名
        Schema schema = new Schema(1, "com.sqlite.greendao");
        //类名-->数据库中对应的表名。
        Entity note = schema.addEntity("Note");
        note.addIdProperty();
        //当前表新增一列,列名text,类型String,不能为空
        note.addStringProperty("text").notNull();
        //当前表新增一列,列名comment,类型String,可以为空
        note.addStringProperty("comment");
        //当前表新增一列,列名date,类型Date,可以为空
        note.addDateProperty("date");

        try {
            //生成对应的类, 生成文件对应的根路径,需要将此路径替换为自己项目所在的路径
            new DaoGenerator().generateAll(schema, "D:/GreenDao/app/src/main/java-gen");
        } catch (Exception e) {
            e.printStackTrace();
        }
}
run 当前的java项目,这样就能在目标路径下看到生成的DaoMaster、DaoSession、Note、NoteDao。
DaoMaster管理所有的DAO。
DaoSession持有所有注册的DAO类。
Note数据类。
NoteDao数据类的数据库接口。提供一些基本的SQL语句封装操作。

2、app项目中使用需要引用greendao-1.3.7.jar,创建DaoMaster对象,官方推荐将创建放到application中这样方便不同的地方调用。

private DaoMaster mDaoMaster;
    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(MainActivity.this, "test", null);
    mDaoMaster = new DaoMaster(helper.getWritableDatabase());

    简单的增删改查操作:
    Note note = new Note();
    note.setText("123");

    mDaoMaster.newSession().insert(note);
    mDaoMaster.newSession().delete(note);
    mDaoMaster.newSession().update(note);
    mDaoMaster.newSession().getNoteDao().loadAll();
    条件查询
    String whereArgs = "%" + keywords + "%";
    WhereCondition.PropertyCondition notLike =
                    new WhereCondition.PropertyCondition(NoteDao.Properties.Text,"NOT LIKE ?","%(" + keywords + "%)");
            QueryBuilder qb = dao.queryBuilder();
            qb.whereOr(
                    NoteDao.Properties.Text.like(whereArgs),
            );
            Cursor cursor = qb.where(notLike);
    de.greenrobot.dao.Property还提供了很多简单实用的条件语句,比如小于、大于、像、包含...

最后用官方提供的一些数据做一个总结:

        1、可能是Android最快的ORM。
        2、简单、强大易用的API。
        3、最小的内存消耗。
        4、类库小,保证项目构建时间,以及避免65536方法数。
        5、支持加密
        6、强大的后续支持,GitHub开源

二、greenDAO实现原理。

 一开始YY过greenDAO的实现原理,因为github开源所以我们来大致看看实现的流程。

    1、greenDAO 原理:

    简单插入一条数据来看,首先创建DaoMaster,在构造方法中发现会注册所有已经生成的DAO.注册其实就是将DAO类和DAO的config作为键值对存入map中。
至于存入干嘛我们往后看,  mDaoMaster.newSession().insert(note);  发现插入数据其实是DaoMaster创建一个DaoSession操作事务来去执行插入,在创建DaoSession
的时候会从上面提到的map中根据类名取出对应的config,来真正的创建DAO,然后通过DAO去插入数据对象,这时会发现出来了一个上一篇博客提到的类SQLiteStatement, AbstractDao
通过引用的SQLiteDatabase.compileStatement,将插入操作转化为SQLiteStatement,然后将插入的数值一一赋值给SQLiteStatement,接着就是上篇博客提到的流程了SQLiteStatement执行execute,
将数据分发给SQLiteSession,然后SQLiteSession获取一个SQLiteConnection来具体的执行数据库操作了。  看到最后发现其实万变不离其宗,都是调用frameWork的SQLiteConnection来执行操作。


    2、greenDAO 生成流程:

    既然怎么用以及使用的流程搞清楚了,再看生成就及其简单了,大家发现没有在java工程中其实是引用了一个freemarker-2.3.10包的,这个是干嘛的呢?简单理解就是帮助你格式化的,
根据你提供模板和数据生成需要的模板。 所以在github的源码中会发现src目录下是提供了一些模板文件的(***.ftl),剩下的就是一一替换成我们规定的数据格式了。


至此greenDAO使用和原理已经明了。回过头看他们官方给出的总结来看:

1、最快的ORM-->没有其他框架的注解,代码以及框架都是提前生成的。
2、简单、强大易用的API。-->github开源  注定了接近实战,亲民。
3、最小的内存消耗。-->真正执行的时候才去调用,对象的复用。
4、类库小,保证项目构建时间,以及避免65536方法数。-->最基础的操作还是使用Framework层。真正执行的时候才去加载。
5、支持加密。 --> 基于framework层添加
6、强大的后续支持,GitHub开源。--> 人民的力量是强大!!!才有了以上





http://download.csdn.net/detail/dsklafkaskl/9722039 greenDAO demo源码

你可能感兴趣的:(SQLite)