greenDao 实践

greenDao 实践

greenDAO 设计的主要特点

  • greenDAO 性能远远高于同类的 ORMLite,具体测试结果可见官网
  • greenDAO 支持 protocol buffer(protobuf) 协议数据的直接存储,如果你通过 protobuf 协议与服务器交互,将不需要任何的映射。
  • 与 ORMLite 等使用注解方式的 ORM 框架不同,greenDAO 使用「Code generation」的方式,这也是其性能能大幅提升的原因。

一,创建

  • 1, 添加依赖

    compile 'de.greenrobot:greendao:2.1.0'
    
  • 2, main下创建目录java-gen用于存放生成的 Bean、DAO、DaoMaster、DaoSession 文件,同时在build中配置

    sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/java-gen']
        }
    }
    
  • 3,创建新的module 用于生成java-gen中的dao文件,在新建的module的build中添加依赖

    compile ‘de.greenrobot:greendao-generator:2.1.0’

  • 4.创建GreenDaoHelper类 简单的java类

    private final static String PACK_NAME = "com.jonas.greendao";//(java-gen目录下Java类的包名)
    //指向之前创建的java-gen文件夹,路径获取方法(右键java-gen文件夹--copyPath即可)
    private final static String DAO_PATH = "E:\\ASWorld\ASLearn\\GreenDaoPractice\\app\\src\\main\\java-gen";
    //private final static String DAO_PATH = "E:/ASWorld/ASLearn/GreenDaoPractice/app/src/main/java-gen";
    
    public static void main(String[] args) throws Exception{
    
        //1,创建 用于添加实体类/表 的 模式对象(Schema)
        Schema schema = new Schema(1, PACK_NAME);
    
        //2,添加实体类/表
        addTables(schema);
    
        //3,通过DAOGenerator对象的generateAll 按照模式对象自动生成ben,dao等文件写入java-gen
        new DaoGenerator().generateAll(schema,DAO_PATH);
    
    }
    ------------------
    private static void addTables(Schema schema){
        //--------添加表1----------
        //根据表名 通过addEntity直接添加空表
        Entity pic = schema.addEntity("PictureCache");//生成的bean对象 名字,首字母大写(不允许命名为Table报错)
        //pic.setTableName("自定义表名");
    
        //---给表 添加属性----
        pic.addIdProperty();//表id 默认重1开始
        pic.addStringProperty("desc").notNull();//描述
        pic.addDateProperty("time");//时间
    
        //--------添加表2----------
    }
    
  • 5,运行GreenDaoHelper(选中文件–右键–run) java-gen就会生成文件 一张表对应两个(bean,beanDao),DaoMaster,DaoSession

二,使用

  • 1,官方推荐将获取 DaoMaster 对象的方法放到 Application 层,这样将避免多次创建生成 Session 对象 (清单文件配置application–name)

    主要涉及对象 DaoMaster.DevOpenHelper,DaoMaster,DaoSession,SQLiteDatabase,【tableName】Dao(增删改查)
    
    // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
    // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
    // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
    // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
    DaoMaster.DevOpenHelper devOpenHelper =  new DaoMaster.DevOpenHelper(this, "test-db", null);
    SQLiteDatabase db = devOpenHelper.getWritableDatabase();
    // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
    DaoMaster daoMaster = new DaoMaster(db);
    mDaoSession = daoMaster.newSession();//可以获取 已创建的表的操作对象 [tablename]Dao对象 对表的内容增删改查
    
  • 2,通过DaoSession对象 ,获取表操作对象[tableName]Dao

    mDaoSession = ( (app)getApplication() ).getDaoSession();
    PicDao mPicDao = mDaoSession.getPicDao();
    
  • 3,通过表操作对象([表名]Dao)进行增删改查

    -----------增-------------
      1,先创建表对象
         Pic pic = new Pic(null, text, new Date());
      2,通过[表名]Dao对象insert
         mPicDao.insert(pic);
    
    ----------改---------------
    update(T entity);//根据entiry的id匹配 然后修改相应数据
    
    ----------查--queryBuilder-------------
    list  mPicDao.queryBuilder().list();//查询所有数据 返回集合
    //查询工具queryBuilder().where(查询条件).orderAsc(排序条件)
    list  mPicDao.queryBuilder().where(PicDao.Properties.Desc.eq("te")).orderAsc(PicDao.Properties.Time);
    //查询条件。。属性名是否(eq,like,notEq,isNull,isNotNull,between,in(IN (..., ..., ...)),notIn,gt(>),lt(<),ge(>=),le(<=))
    //获取表的属性名 [表名]Dao.Properties.属性
    
    ----------删---------------
    delete(T entity)//内部调用 deleteByKey(key); 当不存在此key时 会抛异常Entity has no key
    deleteByKey(key);//通过id删除 id是自增的
    deleteInTx(Iterable<T> entities)//list继承Iterable,删除集合所有。 按条件查出一个集合 然后删除,即按条件删除
    

ORM 框架之 greenDAO 使用心得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值