关于go:万万没想到go也能使用对象来操作数据库了网友直呼健壮性有保证了

31次阅读

共计 2184 个字符,预计需要花费 6 分钟才能阅读完成。

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 的我的项目页面,有我集体微信,能够加我。

正文完
 0