• android_orm框架之greenDAO(一)


    目录:

    一、概述

    二、下载并解压greenDAO相关资源

    三、应用greenDAO框架

      1、创建Java工程

      2、添加类库支持

      3、创建类

    四、代码分析

    五、使用greenDAO

    六、源码下载

    一、概述

      Android开发中对数据的存储和操作是避免不了的,为此android平台为我们提供了多种存储数据的方式,如文件、SharedPreferences、SQLite等。每种数据存储方式各有不同特点,适用不同场景,其中SQLite应用的较多。Android虽然提供了SQLiteDatabase、SQLiteOpenHelper帮助我们进行数据库操作,但是在实际开发中应用起来是很繁琐的,那么有没有更加方便、简洁的方式来操作SQLite数据库呢?答案是肯定的,那就是ORM框架。

      现在应用于android平台中的orm框架还是比较多的,如greenDAO、ormlite、ActiveAndroid、SugarORM等,其中greenDAO运行效率最高、内存消耗最少。下面我们就来看看greenDAO的具体用法。

    二、下载并解压greenDAO相关资源

      通过官网,可以获取greenDAO的相关资源,官网地址:http://greendao-orm.com/ 

      通过上述地址,将greenDAO相关资源下载解压后,可得到六个相关的项目工程:

    1、  DaoCore:greenDAO的核心库。

    2、  DaoExample:greenDAO使用范例项目。

    3、  DaoExampleGenerator:greenDAO使用范例的实体类及DAO组件的生成器项目。

    4、  DaoGenerator:greenDAO的DAO组件生成器项目。

    5、  DaoTest:greenDAO的测试项目。

    6、  PerformanceTestOrmLite:ormlite框架性能测试项目

    三、应用greenDAO框架

      获取资源后,我们来看看如何在我们的android项目中应用greenDAO框架。结合官网文档和范例可知android项目中用到的实体及greenDAO的DAO组件需要又DAO组件生成器工程来生成。DAO组件生成器工程创建及相关代码具体如下:

    1、创建Java工程 

      使用MyEclipse创建一个普通的java工程,工程名为:JREDU_DAOGENERATOR。注意是java工程而不是一个android工程。

    2、为工程JREDU_DAOGENERATOR添加类库支持

      为工程JREDU_DAOGENERATOR添加类库支持:greenDAO-generator.jar和freemarker.jar。

      a) Freemaker.jar可通过此地址进行下载:http://jaist.dl.sourceforge.net/project/freemarker/freemarker/2.3.21/freemarker-2.3.21.tar.gz

      b) greenDAO-generator.jar可通过DaoGenerator导出。只需要导出src和src-template两个目录即可

    3、在工程JREDU_DAOGENERATOR创建类JREDUDaoGenerator

      在工程JREDU_DAOGENERATOR创建类JREDUDaoGenerator,具体编码如下:

    public static void main(String[] args) throws IOException, Exception {
            Schema schema = new Schema(1, "com.jredu.entity");
            //实体类
            Entity employee = schema.addEntity("Employee");
            employee.addIdProperty(); //主键
            employee.addStringProperty("name");
            employee.addDateProperty("hireDate");
            //生成
        new  DaoGenerator()
    .generateAll(schema,"E:\android_space\JREDU_GREENDAO\src");
        }

      运行代码,在控制台可见如下图结果:

     

      打开上图中的目录,我们可以看到此工程为我们生成了4个文件,分别为EmployeeDao、Employee、DaoMaster、DaoSession,文件的内容和作用,后文在做介绍。

      通过以上步骤,我们完了实体类和DAO组件的生成,下面我们来分析下代码中涉及的类及它们的作用。

    四、代码分析

       Schema,模式,通过源码我们可以看到此类的一些属性,如:

    Private final int version:代表构建数据库的版本号。

    Private final String defaultJavaPackage:代表生成实体类的默认包。

    Private final List<Entity> entities:存放Entity的集合。

      因此我们也可以把Schema看做是存放实体的容器。

      通过构造函数:Schema schema = new Schema(1, "com.jredu.entity");我们创建了一个模式,参数1代表数据库的版本号,”com.jredu.entity”代表生成的java类的包,同时也是生成类存放路径的一部分。

      通过方法:Entity employee = schema.addEntity("Employee");创建了一个类名为Employee的Entity对象,并将其添加到schema对象的entities集合属性中。

      Property:实体属性的模型,用于关联实体属性和表的列。

      ToOne、ToMany:用于关联关系映射。

      Entity实体的模型,可用于将实体类映射到对应的表。主要属性有className、tableName、属性、索引、关系等内容,具体请查看源码

    Schema、Entity、Property、Index、ToOne、ToMany关系图:

      DaoGenerator:实体类和DAO组件的生成器,generateAll根据schema和目录参数,首先生成文件存放目录,并从schema中取出所有entity,根据freemaker模板生成对应的实体了和DAO组件。

    五、使用greenDAO

      相关组件已经生成,下面我们继续介绍,如何在android项目中使用greenDAO,过程如下:

    1、 创建android工程,工程名:JREDU_GREENDAO。

    2、 创建包名,与上面构建的Schema中的包名一致。本文案例直接将实体类和DAO组件的生成到本工程下。

    3、为JREDU_GREENDAO添加greenDAO的jar。可以从工程DaoExample中拷贝。

    4、主要代码如下:

      对象声明部分:

    private DaoMaster daoMaster;
    private DaoSession daoSession;
    private EmployeeDao employeeDao;
    private SQLiteDatabase db;

      对象的创建部分:

    DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "jredu.db", null);
        db = helper.getWritableDatabase();
        daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    employeeDao = daoSession.getEmployeeDao();

      添加功能:

    String name = this.content.getText().toString();
          if(TextUtils.isEmpty(name)){
             Toast.makeText(this, "请输入员工姓名!", Toast.LENGTH_SHORT).show();
             return;
         }
         Employee emp = new Employee(null, name, new Date());
         long empId = employeeDao.insert(emp);
         this.show.setText("新增员工的编号:"+empId+","+emp.getId());
         //一次插入多个对象
         List<Employee> list = new ArrayList<Employee>();
         list.add(new Employee(null, "李四", new Date()));
         list.add(new Employee(null, "王五", new Date()));
                
         employeeDao.insertInTx(list, true);
         StringBuilder sb = new StringBuilder("批量新增成功后的员工编号:");
         for(Employee e:list){
             sb.append(e.getId());
         }
         this.show.setText(this.show.getText()+","+sb.toString());

             查询部分:

     List<Employee> emps= employeeDao.loadAll();
     StringBuilder empStr = new StringBuilder();
     for(Employee e: emps){
         empStr.append("编号:").append(e.getId()).append(",姓名:").append(e.getName()).append(",雇佣日期:").append(e.getHireDate());
     }
     this.show.setText(empStr.toString());

      最终效果图如下:

      从代码中,我们看到功能的实现主要使用了Employee、EmployeeDao、DaoMaster、DaoSession。

    Employee:实体对象,映射到表EMPLOYEE。

    EmployeeDAO:通过代码可知此类提供了生成建表、和删表的方法,并类继承了AbstractDao(greenDAO核心类之一,封装了操作表中数据的各种方法)。

    DaoMaster:继承自AbstractDaoMaster,用于创建数据库,并管理数据库连接。

    DaoSession:继承自AbstractDaoSession,所有DAO对象的入口,通过此类可获得实体了的DAO组件。

    六、源码下载

      以上是geenDAO的基本使用过程,DAO组件中的方法、多表关联等在后续文章中继续讲解。

      如有疑问,可下载源码查看详细内容,也可直接评论咨询哦!

    作者:杰瑞教育
    出处:http://www.cnblogs.com/jerehedu/ 
    本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
     
  • 相关阅读:
    一百多套开发视频教程的下载地址
    http://blog.csdn.net/chlele0105/article/details/9056951
    http://kb.cnblogs.com/page/541862/
    Linux版本选择
    2015-2016规划
    PHP 类的继承一些知识点汇总
    PHP面向对象的基本属性分析
    PHP中的魔术方法总结 :
    PHP字符串常用操作函数
    php八中数据类型以及相互转换
  • 原文地址:https://www.cnblogs.com/jerehedu/p/4304766.html
Copyright © 2020-2023  润新知