GO还能够使用对象操作数据库。许多用户评论说,这确保了代码中的鲁棒性
#go #orm #aorm

嗨,我所有正在使用的朋友,新年快乐。

大家是否尝试过使用我之前介绍的AORM库?到目前为止,这是我在GO字段中看到的最好的数据库操作库。

去年(实际上是半个月前),我写了一篇文章,介绍了AORM的链条操作,显示了它的易用性。

“您永远不知道,GO的数据库操作可以像PHP一样流畅”

许多朋友添加了我,表达了他们的支持并提出认真的要求。其中一个请求是能够使用对象在数据库上操作。

经过半个月的研究和努力,现在就在这里,它带有恶魔般的步骤。

什么是面向对象的数据库操作?

许多朋友可能没有听说过,所以我会首先在另一种语言的代码中举一个简单的例子。

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

如上图所示,在PHP代码中,一个简单的数据库查询语句,PHP朋友熟悉。

此处出现的用户,ID和名称都是字符串,需要手动编码,缺点很明显:

  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开发更多。但是维护非常容易。

如果您有一个需要修改的表或字段,只需对其进行修改,编辑器将自动提示您缺少哪些字段,突出显示和显示它们,而不是单个错误,并且不会丢失任何字段。

如果您不修改它,则不会通过汇编。结果,保证程序的鲁棒性。开发后,您也可以睡得很香。

什么是AOM?

AORM是一个基于GO的数据库操作库。

项目地址是github.com/tangpanqing/aorm

核心优势:

使用struct(对象)操作数据库的支持,使您的系统更强大

支持MySQL,MSSQL,Postgres,Sqlite3数据库,使您的系统更易于扩展

支持链操作,使您的开发更有效

支持零值查询或更新,使您的开发体验更好

支持迁移数据结构,使您的数据迁移更方便

当前,GitHub上的星星数量不高,但作者很周到,文档仍然完整。如果您有兴趣,可以看看。

Aorm使用对象操作数据库

以下是我从AOM的文档中找到的关联查询的示例。

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有很好的了解,则应该能够理解代码中每个方法的功能以及每个参数所代表的内容。如您所见,代码中的&文章对应于SQL中的文章表,&person.id对应于SQL中的Person.ID字段,等等。

一旦理解了原则,就可以再次查看代码,并看到没有硬编码的字段名称或表名称。像上面的.NET示例一样,所有操作都是面向对象的,使您的代码更强大,并使维护和重构更方便。

结束
通过本文,我们简要使用对象(结构)在GO中操作数据库并提供了一些示例。

有关AORM的更多功能或文档,您可以在项目地址查看AROM文档

github.com/tangpanqing/aorm

我还强烈邀请朋友使用AORM,如果您在使用过程中遇到任何问题,请随时通过各种渠道与我联系。