美文网首页Android技术研究程序员Android知识
如何优雅的写一篇安利文-以Sugar ORM为例

如何优雅的写一篇安利文-以Sugar ORM为例

作者: 万年场保安 | 来源:发表于2016-04-11 02:32 被阅读1528次

                                    Android数据库居然可以如此轻巧

                                                                  -Sugar ORM简单指南

    Android下的数据库操作一直是一个比较令人头疼的事,如果用原生编写,那么除了数据库连接、版本升级、基础查询等几个基本功能可打包复用外,业务逻辑从Schema到增删改查都必须重写一遍。而更多的时候,我项目的数据库业务逻辑其实并没有那么高的性能要求和复杂度,因此,选择一款ORM库代替,是一件极为明智的选择。

    恰似柳暗花明

    目前Android ORM开源项目中,最知名、应用最广泛的是GreenDAO,它出自著名的greenrobot(就是写EventBus的那群大神),常年排在Github Android ORM榜单的第一位,其优缺点网上已有众多文章深入解读,这里不再深入。

    结合我自身业务需求,GreenDAO仍然显得太重了--它需要用JAVA桌面程序生成Model(其实是因为JAVA我只会android啊..这不是要我命么),因此我一直采用原生的方式处理数据库业务逻辑,直到内心崩溃。到Github又趴了一遍,结果立马就深深爱上了排名第二的Sugar ORM并立即运用到项目中。

    Sugar ORM特性

    简单,就是对Sugar最高的评价。KISS(Keep it simple and stupid)原则最完美的展现,需要经验丰富的代码重构才能做到。我一直是ORM的忠实拥趸者,我首先考虑快速开发,从不考虑性能。从Entity FrameWork到Eloquent ORM再到Sugar ORM,虽然Sugar没有前两者强大,但是我觉得已经足够,为什么?

    项目自己都认为--极致简单的方式处理数据库业务

    先来看看Sugar的介绍里面自己是怎么说的:

    A simple, concise, and clean integration process with minimal configuration.

    (用最少的配置实现最简单、明了、畅快的集成过程)

    Automatic table and column naming through reflection.

    (采用反射的方式无须干预自动生成表和字段)

    Support for migrations between different schema versions.

    (支持不同版本数据库集合的迁移)

    那么Sugar的集成,到底简单到什么程度呢。看看Bean的编写:

    一个Bean的例子

    不像GreenDAO,需要专门用桌面工具生成Bean。不需要你写表创建代码,不需要写增删改查的代码(当然业务代码还是要写,他懂你的心情,不懂你的心),就是简单到这个程度。如果属性中有Drawable等不想存入数据库的字段,那么加上@Ignore就好,随心所欲。

    配置2步搞定

    Sugar的配置只有2处.

    1.修改你的AndroidManifest.xml

    如图,依此为包括数据库名称、版本、是否打开日志、你的项目包名。别忘了在application标签加上2中重载的Application类参数

    AndroidManifest.xml添加数据库信息

    2.为你的Application类添加初始化和销毁。

    一个启动,一个关闭。设置好后其他都不需要操心。

    在Application中添加Sugar环境设置

    想早点下班,用QueryBuilder

    ORM最强大的地方体现在OOP原则的查询操作上,Sugar把增删改查都给你封好了。因为足够简单,所以就以查询为例,包含:

    1.Id查询,findById

    2.简单Sql语句查询,find

    3.复杂Raw语句查询,findWithQuery

    3.数量查询,count

    不用写一长串代码,一句话搞定

    复杂点的业务逻辑,写好Sql语句,用executeQuery或者findWithQuery执行,选哪个函数看你心情,开心就好。倒是有一个需要注意的坑,Sugar有一个命名规范约定,如果字段以驼峰命名法命名,需要改为下划线命名法,如“testUnderscore”需要改为“test_underscore”。不过你也不必过于担心,Sugar已经提供了函数StringUtil.toSQLName("testUnderscore"),自动帮你转换命名。

    我不知道你,反正我就他了

    其实在刚开始做Android开发时,用到国内大神写的xUtils框架时就已经较浅的了解ORM了,但是后来放弃坚持用原生写所有代码。由于疏于了解,只知道GreenDAO,但是用起来过于麻烦。发现Sugar之后,各种数据也不打算存Preference了,我仍然坚持不打算用Annotation库,但Sugar肯定会用在之后的每一个项目。因为简单,可以把更多的精力放在业务逻辑上,这不正是开源社区的思想么。我不知道你,反正我就他了。

    相关资料

    项目地址:https://github.com/satyan/sugar

    文档:http://satyan.github.io/sugar/getting-started.html

    ‘2016-6-16更新

    在使用中发现,sugar自android-studio2.1(看issue可能是gradle版本原因)会无法初始化model的数据表,所以不再推荐此轮子,建议转为liteORM或者realm!!

    欢迎加App独立开发群  『533838427』

    相关文章

      网友评论

      • 昵称被谁抢了:目前来说说使用的感觉,首先SugarOrm的官方文档没有更新了,最新版本呢为1.4,需要自己看源码去找找,而且他里面内置了一个id字段,如果自己的bean对象里面有id,会冲突,如果使用gson会出现序列化失败的现象
        万年场保安:@JustNormal 一直用liteorm了,这个坑很麻烦
      • JasonChen1195:另外Realm目前已经发现一些坑。具体的谷歌一下就能看到。所以我没有选择Realm还是用的SugarORM。而且我也确实因为Instant Run功能被坑了一把,谷歌了一下才找到问题所在。所以如果不介意关掉Instant Run的话(我觉得这个功能有时候无法正确更新,尽管速度快,我还是关掉了),还是可以使用SugarORM的。
        万年场保安:@JustNormal 现在用liteorm了
      • JasonChen1195:无法初始化model数据表是因为Android Studio的Instant Run功能引起的。把Instant Run关掉就可以了。 :wink:

      本文标题:如何优雅的写一篇安利文-以Sugar ORM为例

      本文链接:https://www.haomeiwen.com/subject/tifilttx.html