Hi,各位go的小伙伴,大家新年好。

之前给大家介绍的Aorm库,都用上了吗?这可是迄今为止我见过的,go畛域最好用的数据库操作库了。

去年的时候(实际上是半个月前),我发了一篇文章来介绍Aorm的链式操作,展现了它的易用性。

《万万没想到,go的数据库操作,也能像php一样溜了》

不少敌人加我,示意了反对,并且提出了殷切希望。其中有一点,心愿能够减少应用对象来操作数据库。

通过我半个月的钻研与致力,当初它来了,它来了,它踏着魔鬼步调走来了。

什么是应用对象操作数据库

有很多敌人可能没听过说过这个事件,我就先拿别的语言的代码例子来简略介绍下

$users = DB::table('users')->whereIn('id', [1, 2, 3])->orderBy('name', 'desc')->get();

如上,PHP的代码里,一个简略的数据库查问语句,php的敌人很眼生吧。

这里的呈现的users, id, name都是字符串,都须要手动编写进去,弊病很显著

1. 开发的时候,容易产生拼写错误。

2. 重构的时候,或者字段名以及表名有更改的时候,那可就苦逼了。因为他们散布在我的项目的各个中央,你须要极其小心的,正确的找进去他们,而后批改。漏掉一个那就是一颗定时炸弹。

咱们再来看看 .NET 里,如何解决这个问题

dbContext    .Person    .GroupJoin(        dbContext.Products,         person => person.Id,         product => product.Id,         (person, products) => new { Person = person, Products = products }    )    .SelectMany(        combination => combination.Products.DefaultIfEmpty(),         (person, products) => new {             PersonId = person.Person.Id,             PersonName = person.Person.Name,             ProductsId = products.Id,             ProductsName = products.Product         }    )    .ToList();

以上你看到的代码,外面没有一个手写的字符串,全都是对象类型,或者对象的属性。

开发的时候,你须要提前定义好对象以及属性,这比着php的开发,的确会多一些工作。然而保护的时候,超级省心。

如果你有表,或者字段须要批改,间接批改就好,编辑器会主动提醒你,哪些字段没有了,高亮并且显示进去,一个都不会错,不会少。如果你不批改,编译的时候基本不通过。由此,你程序的健壮性就有保障了。开发完,你也能够安心的睡大觉了。

Aorm是什么

Aorm是一个基于go语言的数据库操作库。

我的项目地址: https://github.com/tangpanqin...

外围长处:

  1. 反对 应用构造体(对象) 操作数据库,让你的零碎更强壮
  2. 反对 MySQL,MsSQL,Postgres,Sqlite3 数据库,让你的零碎更容易扩大
  3. 反对 链式操作,让你的开发效率更高
  4. 反对 空值查问或更新,让你的开发体验更好
  5. 反对 迁徙数据结构,让你的数据迁徙更不便

目前github上星星还不多,然而作者比拟用心,文档还是很全的。有趣味的能够移步看看。

Aorm如何应用对象来操作数据库

上面是我从Aorm的文档里,找到的关联查问的例子

        aorm.Db(db).        Table(&article).        LeftJoin(            &person,            []builder.JoinCondition{                builder.GenJoinCondition(&person.Id, builder.RawEq, &article.PersonId),            },        ).        SelectAll(&article).        SelectAs(&person.Name, &articleVO.PersonName).        WhereEq(&article.Type, 0).        WhereIn(&person.Age, []int{18, 20}).        GetMany(&list2)

它产生的sql语句如下

    SELECT article.*,person.name as person_name     FROM article     LEFT JOIN person ON person.id=article.person_id     WHERE article.type = ?     AND article.age IN (?,?)        0 18 20

比照代码和sql,如果你sql根底还能够的话,应该可能看进去代码里各办法的作用,以及各参数代表什么

如你所见,代码里&article对应sql里的article表, &person.Id 对应sql里的 person.id字段,以此类推

看明确原理之后,咱们再来扫视代码,没有一个字段名是硬编码,也没有一个表名是硬编码。如同下面 .net 的例子,所有的操作,都是对象操作,它会让你的代码更强壮,保护和重构更不便。

结束语

通过本文,咱们简略介绍了在go语言下,应用对象(构造体)来操作数据库,并且举了一些例子。

对于Aorm更多的特点或者文档,你能够去看Aorm的文档地址

我的项目地址: https://github.com/tangpanqin...

另外,竭力邀请各位朋友应用Aorm,如果应用的过程中遇到问题,欢送应用各种渠道分割我。github的我的项目页面,有我集体微信,能够加我。