数据库开源框架之GreenDAO


主页: https://github.com/greenrobot/greenDAOjava


配置: 添加如下依赖
* compile 'de.greenrobot:greendao:2.1.0'
* compile 'de.greenrobot:greendao-generator:2.1.0'android


优势:
* 性能最大化,内存开销最小化
* 易于使用的API
* 为Android进行高度优化git



重要类

DaoMaster:它保存了sqlitedatebase对象以及操做DAO classes(注意:不是对象)。其提供了一些建立和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并建立数据库的框架。

DaoSession:会话层。操做具体的DAO对象(注意:是对象),好比各类getter方法。

XXXDao:实际生成的某某DAO类,一般对应具体的java类,好比NoteDao等。其有更多的权限和方法来操做数据库元素。

XXXEntity:持久的实体对象。一般表明了一个数据库row的标准java properties。

github


使用步骤sql

1.建立自定义的DAOGenerater,指定数据库相关配置并生成相关类数据库

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;

/**
 * Description:帮助生成操做数据的一些Java类

 */

public class CustomHelper {

    public static void main(String[] args) throws Exception {
        //第一个参数表示数据库版本号,
        //若是发生变动会致使数据库更新的操做被调用(若是不修改生成的DaoMaster中的方法
          //升级默认操做是删除全部表并从新建表)
        //第二个参数是生成的DAO类的包路径
        Schema schema = new Schema(1, "com.itheima.greendao.db");

        // 建立表,参数为表名
        Entity entity = schema.addEntity("Info");
        // 为表添加字段
        entity.addIdProperty().primaryKey().autoincrement(); //自增加id为主键
        entity.addStringProperty("name").notNull();//非null字段
        entity.addIntProperty("age");//Int类型字段
        entity.addStringProperty("tel");// String类型字段

        // 生成数据库相关类
        //第二个参数指定生成文件的本次存储路径,AndroidStudio工程指定到当前工程的java路径
        new DaoGenerator().generateAll(schema,
                "D:\\Android\\code-as\\Aandroid56\\DataBase\\greendao\\src\\main\\java");
    }

}

 2.在Application中经过DaoMaster.DevOpenHelper初始化数据库框架

// 该初始化过程最好放在Application中进行,避免建立多个Session
private void setupDatabase() {
    // 经过 DaoMaster 的内部类 DevOpenHelper建立数据库
    // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除全部的表               
    /**
     * @param context : Context
     * @param name : 数据库名字
     * @param factory : CursorFactroy
     */
    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "student.db", null);
    // 获取数据库
    SQLiteDatabase database = helper.getWritableDatabase();
    // 获取DaoMaster
    DaoMaster daoMaster = new DaoMaster(database);
    // 获取Session
    DaoSession daoSession = daoMaster.newSession();
    // 获取对应的表的DAO对象
    InfoDao dao = daoSession.getInfoDao();}

 3.获取数据库的DAO对象,便可进行增删改查的操做ide

        // 增
       dao.insert(new Info(2l,"张三",18,"119"));
        // 删
        dao.deleteByKey(1L);
        // 改
        dao.update(new Info(3L, "赵琦", 78, "18812348888"));

        // 查
        QueryBuilder<Info> builder = dao.queryBuilder();
        List<Info> build = builder.list();
        for(Info info:build){
        Log.e("MainActivity",info.toString());
        }