文档章节

Android Orm框架(GreenDao)

iuKa
 iuKa
发布于 2014/03/13 21:32
字数 1038
阅读 9354
收藏 8

    android项目里面很多都会有使用sqlite来保存数据。原生api真心不好使啊,要写超多超多的代码,还要写顾虑很多细节问题。于是乎就想偷懒了,干脆去网上找个orm框架吧!
    Ok,google it。筛选一下,就锁定了ormlite和greendao。简单看了一下,ormlite简单好用,比较符合JavaEE开发者使用习惯,注解真的很好用啊!再去greendao官网逛逛,他说我们的目标是:


  • 最牛掰的性能
  • 超好用的API
  • 为Android大大优化
  • 最小的内存使用
  • ******
再翻翻看,还有同ormlite的性能对比:

上面可以看到,greeendao的insert和update效率要比ormlite快两倍左右,load更是夸张到4倍多。尼玛也太厉害了吧,优化这么狠。这么一大堆好处,还不赶紧使使。


    我们可以在官网上直接下来,也可去github项目主页上下载源码。建议去下载github哈,因为有源码有列子,比较直观易懂。源码使用gradle构建,需要安装gradle插件。其实真正也只有依赖一个freemaker.jar,直接网上下载一个就好。下面新建一个java工程,注意是java工程不是android工程。导入freemaker.jar和greendao-generator.jar,加入到build path。建一个如下的类:

public class DaoGenerator {

    public static void main(String[] args) throws Exception {
        // first parameter for version,  second for default generate package
        Schema schema = new Schema(1, "com.xckevin.example.model");

        addNote(schema);
        addCustomerOrder(schema);
        addUser(schema);
        // set dao class generate package
        schema.setDefaultJavaPackageDao("com.xckevin.example.dao");
        // keep custom code block
        schema.enableKeepSectionsByDefault();
        new DaoGenerator().generateAll(schema, "../GreenDaoExample/src");
    }

    private static void addNote(Schema schema) {
        Entity note = schema.addEntity("Note");
        note.addIdProperty();
        note.addStringProperty("text").notNull();
        note.addStringProperty("comment");
        note.addDateProperty("date");
    }
    
    private static void addUser(Schema schema) {
    	Entity user = schema.addEntity("User");
    	user.setTableName("t_user");
    	user.addIdProperty();
    	user.addStringProperty("account").unique();
    	user.addStringProperty("password");
    	user.addDateProperty("birthday");
    	user.addShortProperty("gender");
    	user.addIntProperty("height");
    	user.addFloatProperty("weight");
    	user.addDateProperty("registerTime");
    	user.implementsInterface("Jsonable<User>");
    }

    private static void addCustomerOrder(Schema schema) {
        Entity customer = schema.addEntity("Customer");
        customer.addIdProperty();
        customer.addStringProperty("name").notNull();

        Entity order = schema.addEntity("Order");
        order.setTableName("ORDERS"); // "ORDER" is a reserved keyword
        order.addIdProperty();
        Property orderDate = order.addDateProperty("date").getProperty();
        Property customerId = order.addLongProperty("customerId").notNull().getProperty();
        order.addToOne(customer, customerId);

        ToMany customerToOrders = customer.addToMany(order, customerId);
        customerToOrders.setName("orders");
        customerToOrders.orderAsc(orderDate);
    }

}

代码号简单的话,看名字就知道是什么意思了。greendao支持各种类型的哇,还支持一对一、一对多、多对多的关系,很强悍!直接运行,代码生成

自动生成model和dao,倍儿爽!随便看一个model类:

package com.xckevin.example.model;

// THIS CODE IS GENERATED BY greenDAO, EDIT ONLY INSIDE THE "KEEP"-SECTIONS

// KEEP INCLUDES - put your custom includes here
import org.json.JSONException;
import org.json.JSONObject;
// KEEP INCLUDES END
/**
 * Entity mapped to table t_user.
 */
public class User implements Jsonable<User> {

    private Long id;
    private String account;
    private String password;
    private java.util.Date birthday;
    private Short gender;
    private Integer height;
    private Float weight;
    private java.util.Date registerTime;

    // KEEP FIELDS - put your custom fields here
    // KEEP FIELDS END

    public User() {
    }

    public User(Long id) {
        this.id = id;
    }

    public User(Long id, String account, String password, java.util.Date birthday, Short gender, Integer height, Float weight, java.util.Date registerTime) {
        this.id = id;
        this.account = account;
        this.password = password;
        this.birthday = birthday;
        this.gender = gender;
        this.height = height;
        this.weight = weight;
        this.registerTime = registerTime;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public java.util.Date getBirthday() {
        return birthday;
    }

    public void setBirthday(java.util.Date birthday) {
        this.birthday = birthday;
    }

    public Short getGender() {
        return gender;
    }

    public void setGender(Short gender) {
        this.gender = gender;
    }

    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }

    public Float getWeight() {
        return weight;
    }

    public void setWeight(Float weight) {
        this.weight = weight;
    }

    public java.util.Date getRegisterTime() {
        return registerTime;
    }

    public void setRegisterTime(java.util.Date registerTime) {
        this.registerTime = registerTime;
    }

    // KEEP METHODS - put your custom methods here
    @Override
	public User parse(JSONObject jsonObj) {
		// TODO Auto-generated method stub
    	try {
			id = jsonObj.getLong("id");
			account = jsonObj.getString("account");
			return this;
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return null;
	}
    // KEEP METHODS END

}

注意上面的// KEEP代码块中是手动加入了,当设置了

schema.enableKeepSectionsByDefault

后,该部分代码块在下次更新的时候会保留下来。


dao类中也有各种基本的方法,如insert,update,delete等等。基本可能完成大部分需求了,终于不用写那么繁琐的数据库操作啦!

    再看看怎么在client获取到dao,注意client要加入greendao.jar哦。有了dao就可以对数据库各种操作了!

        DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
        db = helper.getWritableDatabase();
        daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
        userDao = daoSession.getUserDao();


总体来说,ormlite使用简单,学习成本低,容易上手,效率比greendao偏慢一点。greendao耦合性高,使用时要另外使用一个java工程创建,开始环境搭建比较麻烦,但是一旦上手还是十分容易使用的,并且效率最好。个人还是推荐使用greendao。


    



© 著作权归作者所有

上一篇: BAE试用
iuKa
粉丝 12
博文 11
码字总数 9266
作品 0
杭州
程序员
私信 提问
greenDAO的简单使用(一)

greenDAO是Android经常使用的ORM开源框架,ORM(Object-Relation-Mapping)对象关系映射,它可以帮助 Android 开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案 greenDAO的优点...

dztai
2016/05/24
0
0
「Android」GreenDao

版本:greenDAO 3.2.2 官网:http://greenrobot.org/greendao/ GitHub:https://github.com/greenrobot/greenDAO 写在前面: 这个库极大的优化了我们使用SQLite数据库,但对SQLite数据库及其语...

为安然
2018/07/30
0
0
Android:greenDao与Parcelable使用总结

greenDao与Parcelable都可以实现对Object数据的存储。 1. greenDao greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一 个简单的面向对...

mengyrlind
2014/09/10
1K
0
RxCache 整合 Android 的持久层框架 greenDAO、Room

一. 背景 RxCache 是一个支持 Java 和 Android 的 Local Cache 。 之前的文章给 Java 和 Android 构建一个简单的响应式Local Cache曾详细介绍过它。 RxCache 包含了两级缓存: Memory 和 Pe...

fengzhizi715
2018/10/17
0
0
greenDAO讲义(一):使用篇

目前android开发刚学习了一个多月,最近开始研究三方开源框架的用法。了解android开发的人应该都会知道,android的数据库开发主要用到sqlite(如果这点你不清楚,那这篇文章就直接pass吧)。...

古沐风
2014/01/27
56.3K
12

没有更多内容

加载失败,请刷新页面

加载更多

db.properties

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=falsejdbc.username=rootjdbc.pas......

行者终成事
14分钟前
3
0
从 Storm 到 Flink,汽车之家基于 Flink 的实时 SQL 平台设计思路与实践

在 2019 年之前,之家的大部分实时业务都是运行在 Storm 之上的。Storm 作为早期主流的实时计算引擎,凭借简单的 Spout 和 Bolt 编程模型以及集群本身的稳定性,俘获了大批用户。下图是实时计...

阿里云官方博客
14分钟前
4
0
网络安全-Day04

2.1.1 什么是SQL注入 2.1.2 注入分类 2.1.3 MySQL手工注入 2.1.4 sqlmap使用 2.1.5 总结 什么是SQL注入 SQL注入漏洞原理 什么是SQL 结构化查询语言(Structured Query Language),是一种特殊目...

Jerry1101
15分钟前
3
0
docker容器内安装yum,vim等命令,以及配置ls指令

使用国内镜像 mv /etc/apt/sources.list /etc/apt/sources.list.bakecho "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.listecho "deb http://......

长恭
15分钟前
3
0
超详细的MySQL8.0.17版本安装教程

下载MySQL MySQL的官网地址:https://www.mysql.com/。 如下图所示: 然后点击DOWNLOADS ==> Community,选择MySQL Community Server。如图所示: 滑到页面的最下面,找到Recommended Downl...

彩色泡泡糖
18分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部