Android ORM 框架:GreenDao的使用,只需看一遍就会

前言

这篇文章主要讲的是GreenDao的使用,可能初次接触到GreenDao的android开发者,对他并不熟悉,不知道这是个什么样的框架,提到这个框架,我需要提到的是android数据库开发经常会用的SQLite,相信很多人对这个并不陌生,知道它是干嘛用的,但是原生的SQLite在使用起来,并不是那么的方便,在效率上也没那么高,所以基于这一点,有很多的第三方的用于操作android数据库的框架涌现了出来,现在市面上比较优秀的主流框架有OrmLite、SugarORM、Active Android、Realm 与 GreenDAO,而今天我将选择GreenDao当主角,讲讲这个框架的特点以及如何快速的上手并用在自己的项目中。


关于GreenDao

这里写图片描述
这个图片足以说明SQLite与GreenDao的关系,说白了,GreenDao 就是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。

GreenDao的设计目标
  • 一个精简的库
  • 性能最大化
  • 内存开销最小化
  • 易于使用的 APIs
  • 对 Android 进行高度优化
GreenDao与OrmLite的比较
GreenDao的优点

1、效率很高,插入和更新的速度是sqlite的2倍;
2、加载实体的速度是ormlite的4.5倍,这里是官网测试结果
3、文件较小(<100K),占用更少的内存 ,但是需要create Dao;
4、操作实体灵活:支持get,update,delete等操作

GreenDao的缺点

学习成本较高。其中使用了一个java工程根据一些属性和规则去generate一些基础代码,类似于javaBean但会有一些规则,另外还有QueryBuilder、Dao等API,所以首先要明白整个过程,才能方便使用。没有ORMLite那样封装的完整,不过greenDao的官网上也提到了这一点,正是基于generator而不是反射,才使得其效率高的多。

OrmLite的优点

1、文档较全面;
2、社区活跃,有好的维护;
3、使用简单,易上手。

OrmLite的缺点

基于反射,效率较低


如何使用

第一步:创建Java工程
由于GreenDao的使用需要依赖一个Java工程,所以第一步先创建一个java工程,在android studio中创建的步骤看图
图一
这里写图片描述
图二
这里写图片描述
图三
这里写图片描述
到这里,一个Java工程就创建好了

第二步:在Java工程项目的build.gradle文件里面添加如下依赖:

compile 'de.greenrobot:greendao-generator:2.1.0'

第三步:编写Java工程主代码

package com.example;

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

public class GeneratorFortroy {

    public static void main(String[] args){
        // 创建Schema
        Schema s = new Schema(1,"test.greendao.com.greendaotest.db");
        // 添加实体对象
        Entity user = s.addEntity("User");
        // 给实体添加属性
        user.addIdProperty().autoincrement();// 用户ID
        user.addStringProperty("name");      // 姓名
        user.addStringProperty("sex");       // 性别
        user.addIntProperty("height");       // 身高
        user.addIntProperty("age");          // 年龄

        try {
            // 创建Dao生成器生成所需要的对象和Dao对象,下面的参数一我就不说了,第二个参数是你要把所有的文件生成到的目标文件的文件路径,比如我这里是android项目所在的目录的java目录下
            new DaoGenerator().generateAll(s,"C:\\Users\\zhangtao\\Desktop\\GreenDaoTest\\app\\src\\main\\java");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

经过以上三步,一个java工程项目已经完成,接下来需要创建android工程了,相信用过android studio的开发者对这个步骤并不陌生,我这里就不在赘述了,还不太熟悉的可以点这里进去学习。

第四步:在android项目的build.gradle的文件里引入依赖库

compile 'de.greenrobot:greendao:2.1.0'

第五步:运行刚才创建好的Java工程
这里写图片描述
完成这一步,可以回头看看Android项目里面有没有一下这几个文件,如果有,表示数据库创建成功, 那么接下去就可以做数据库的增删改查测试了
这里写图片描述

第六步:数据库的增删改查测试
布局文件activity_mian.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <Button
        android:onClick="add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="添加" />
    <Button
        android:onClick="query"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询" />
    <Button
        android:onClick="update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改" />
    <Button
        android:onClick="delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除" />
</LinearLayout>

主代码MainActivity.java

package test.greendao.com.greendaotest;

import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import java.util.List;

import test.greendao.com.greendaotest.db.DaoMaster;
import test.greendao.com.greendaotest.db.DaoSession;
import test.greendao.com.greendaotest.db.User;
import test.greendao.com.greendaotest.db.UserDao;

public class MainActivity extends AppCompatActivity {

    private static String TAG = MainActivity.class.getName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    /**
     * 添加
     * @param v
     */
    public void add(View v) {
        DaoSession session = getSession();
        UserDao dao  = session.getUserDao();
        for (int i = 0; i < 10; i++){
            User user = new User();
            user.setName("李四"+i);
            user.setAge(19);
            user.setSex("男");

            dao.insert(user);
        }
    }

    /**
     * 查询
     * @param v
     */
    public void query(View v) {
        DaoSession session = getSession();
        UserDao dao = session.getUserDao();
        List<User> users = dao.loadAll();
        for (User user:users) {
            Log.d(TAG, "testLoadAll: "+"姓名:"+user.getName());
            Log.d(TAG, "testLoadAll: "+"性别:"+user.getSex());
            Log.d(TAG, "testLoadAll: "+"年龄:"+user.getAge());
        }
    }

    /**
     * 修改
     * @param v
     */
    public void update(View v) {
        DaoSession session = getSession();
        UserDao dao  = session.getUserDao();
        User user = dao.loadByRowId(1);
        user.setAge(34);
        dao.update(user);
    }

    /**
     * 删除
     * @param v
     */
    public void delete(View v) {
        DaoSession session = getSession();
        UserDao dao  = session.getUserDao();
        User user = dao.loadByRowId(1);
        dao.delete(user);
    }

    /**
     * 获取DaoSession
     * @return DaoSession
     */
    private DaoSession getSession(){
        SQLiteDatabase db = new DaoMaster.DevOpenHelper(this,"user.db",null).getWritableDatabase();
        DaoMaster dm = new DaoMaster(db);
        return dm.newSession();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值