Android ORM框架之GreenDAO(一) 初识

     做Android开发,避免不了要和SQLite打交道,如果不使用任何框架,直接使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等,那么是比较麻烦的!目前市面都出现好多比较好用的ORM数据库框架,例如郭神出的LitePal,OrmLite,GreenDAO等。那么今天就来介绍一下GreenDAO的有关使用。

一、GreenDAO概述。


     简单的讲,GreenDAO是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。

     GreenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。

1.GreenDAO官网,http://greendao-orm.com/

 2.项目地址,https://github.com/greenrobot/greenDAO。

GreenDAO设计的主要目标 

(1). 一个精简的库
(2). 性能最大化
(3).内存开销最小化
(4).易于使用的 APIs
(5).对 Android 进行高度优化

3.核心类说明


(1).DaoMaster  保存了数据库对象和管理DAO类的classes,其提供了一些静态方法创建和删除表,内部类OpenHelper和DevOpenHelper 实现了SQLiteOpenHelper并创建数据库的框架。

(2)DaoSession 管理所有可用的DAO对象,可以通过getter方法获得。DaoSession还提供了一些通用的持久性方法比如插入、加载、更新,刷新和删除实体。

(3).EntityDao 数据访问对象,每一个实体类都有对应的greenDAO对象。

(4).Entity 实体类对象。

二、配置GreenDAO框架。

目前GreenDAO已经更新到3.*,新版本的使用方法和GreenDAO2.*有所不同,本文基于的是GreenDAO2.*,需要大家注意!

1.如果你使用的Android Studio,那么配置使用GreenDAO很简单,只需要在Gradle文件中加入依赖,

  compile "de.greenrobot:greendao:*"

 就可以了!Gradle会帮你远程下载这个GreenDAO框架。

2.如果你使用的还是Eclipse,那么就需要下载jar,导入到项目即可使用,你可以在http://search.maven.org中搜索以下三个jar下载,

greendao-generator.jar,freemarker.jar,greendao.jar

三、创建Java工程,生成DAO 文件。

如果你使用的还是Eclipse需要创建一个Java工程,该工程主要用来生成生成数据库表对应的java实体和处理业务的dao层代码。需要导入包greendao-generator.jar和freemarker.jar。下面,是使用Android Studio实现的。

前提

打开Android Studio,新建一个Project,在module中‘src/main’目录下,新建一个目录,名称为‘java-gen’,



然后需要在该module的build.gradle中,加入如下代码,

  
  android {
  ...
   sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/java-gen']
        }
    }
  ...
  }
  
  dependencies {
   ...
   compile 'de.greenrobot:greendao:2.1.0'
}

1. 新建一个Java工程。在Project右键,“NEW-Module”,然后在页面中选择‘java Library’,


2.在该java工程的build.gradle中,需要引入依赖,

  compile 'de.greenrobot:greendao-generator:2.1.0'
3. 新建一个类  ExampleDaoGenerator,具体代码如下,

  public static void main(String[] args) throws Exception {
        //第一个参数是数据库版本号,第二个参数是包的根目录的包
        int version=1;
        String defaultPackage="cn.xinxing.model";
        Schema schema = new Schema(version, defaultPackage);
        //指定自动生成的dao对象的包名,不指定则都DAO类生成在defaultPackage包中
        schema.setDefaultJavaPackageDao("cn.xinxing.dao");
        //添加实体
        addEntity(schema);
        addNote(schema);
        try {
            //第二个参数是src-gen文件夹路径
            String outDir="E:/as_workspace/test/greendaotest/src/main/java-gen";
            new DaoGenerator().generateAll(schema,outDir);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void addEntity(Schema schema) {
        //一个实体(类)就关联到数据库中的一张表
        Entity entity = schema.addEntity("Student");
        //指定表名,如不指定,表名则为 Entity(即实体类名)
        entity.setTableName("student");
        //给实体类中添加属性(即给表中添加字段)
        entity.addIdProperty().autoincrement();//添加Id,自增长
        entity.addStringProperty("name").notNull();//添加String类型的name,不能为空
        entity.addIntProperty("age");//添加Int类型的age
        entity.addDoubleProperty("score");//添加Double的score
    }


    private static void addNote(Schema schema) {
        // 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名)
        Entity note = schema.addEntity("Note");
        // 指定表名,如不指定,表名则为实体类名
         note.setTableName("note");
        // greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值
        //给实体类中添加属性(即给表中添加字段)
        note.addIdProperty().autoincrement();//添加Id,自增长
        note.addStringProperty("text").notNull();//不能为空
        note.addStringProperty("comment");
        note.addDateProperty("date");
    }
说明,

(1).创建模型或者说创建表 需要用到Schema类(数据库对象的集合),

// 第一个参数是数据库版本号,第二个参数是根目录的包路径
  int version=1;
  String defaultPackage="cn.xinxing.model";
  Schema schema = new Schema(version, defaultPackage);
(2).指定自动生成的dao对象的包名,不指定则都DAO类生成在defaultPackage包中
    schema.setDefaultJavaPackageDao("cn.xinxing.dao");
(3).添加实体(通过实体类创建出表以及字段)
  private static void addEntity(Schema schema) {
        //一个实体(类)就关联到数据库中的一张表
        Entity entity = schema.addEntity("Student");
        //指定表名,如不指定,表名则为 Entity(即实体类名)
        entity.setTableName("student");
        //给实体类中添加属性(即给表中添加字段)
        entity.addIdProperty().autoincrement();//添加Id,自增长
        entity.addStringProperty("name").notNull();//添加String类型的name,不能为空
        entity.addIntProperty("age");//添加Int类型的age
        entity.addDoubleProperty("score");//添加Double的score
    }

(4). 生成DAO,

            String outDir="E:/as_workspace/test/greendaotest/src/main/java-gen";
            new DaoGenerator().generateAll(schema,outDir);  //第二个参数是src-gen文件夹相对路径

写完以上代码后,运行该java工程,在控制台如果输入如下信息,说明成功了,如果出错,请按照错误提示处理。


然后我们打开java-gen目录,便会看到


至此,生成DAO已经完成了,下面就看如何使用这些文件,

四、使用。

为了管理以及使用方便,我们创建一个DbHelper 类,通过它来管理有关数据库操作。

 DbHelper 的具体实现如下,

public class DbHelper {

    private static DbHelper instance;

    private DaoMaster.DevOpenHelper helper;
    private SQLiteDatabase db;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private StudentDao mStunentDao;
   

    public static synchronized DbHelper getInstance(Context context) {
        if (instance == null)
            instance = new DbHelper(context);
        return instance;
    }

    private DbHelper(Context context) {
        helper = new DaoMaster.DevOpenHelper(context, "xinxing-db", null);
        db = helper.getWritableDatabase();
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
        mStunentDao = mDaoSession.getStudentDao();
        mStunentDao.getDatabase();
    }

    /**
     * 向student表中插入一条数据
     *
     * @param student
     */
    public void insertStudent(Student student) {
        mStunentDao.insert(student);
    }

   

    /**
     * 向student表中插入多条数据
     *
     * @param list
     */
    public void insertStudent(List<Student> list) {
        for (Student s : list) {
            mStunentDao.insert(s);
        }
    }

    /**
     * 获取所有的student表中数据
     *
     * @return
     */
    public List<Student> getAllStudents() {
        return mStunentDao.loadAll();
    }



    public void closeDb() {
        if (db.isOpen())
            db.close();
    }
}

上面是简单操作数据库的方法,下面在Activity中编写测试代码,

public class MainActivity extends AppCompatActivity {

    Button btn;
    TextView tv;
    Student mStudent;
    StringBuffer stringBuffer;
    int i = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DbHelper.getInstance(MainActivity.this).deleteAllStudent();
        stringBuffer = new StringBuffer();
        btn = (Button) findViewById(R.id.addData);
        tv = (TextView) findViewById(R.id.tv);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                i++;
                stringBuffer.setLength(0);
                mStudent=new Student();
                mStudent.setName("job" + i);
                mStudent.setAge(i);
                mStudent.setScore(100d-i);
                DbHelper.getInstance(MainActivity.this).insertStudent(mStudent);
                List<Student> list = DbHelper.getInstance(MainActivity.this).getAllStudents();
                for (Student s : list) {
                    stringBuffer.append(s.getName() + s.getAge() + s.getScore()+"\n");
                }
                tv.setText(stringBuffer.toString());
            }
        });
    }
}
下面是运行后点击多次按钮的效果截图,

下面是数据库中的student表数据截图,




 至此,使用GreenDAO创建数据库以及表,插入数据,显示数据都已经成功了!是不是很简单呢!偷笑下篇文章讲解使用GreenDAO来做一些复杂的查询操作以及更新!详情请看 Android ORM 框架之 GreenDAO(二) 进阶











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值