嗨,我所有正在使用的朋友,新年快乐。
大家是否尝试过使用我之前介绍的AORM库?到目前为止,这是我在GO字段中看到的最好的数据库操作库。
去年(实际上是半个月前),我写了一篇文章,介绍了AORM的链条操作,显示了它的易用性。
“您永远不知道,GO的数据库操作可以像PHP一样流畅”
许多朋友添加了我,表达了他们的支持并提出认真的要求。其中一个请求是能够使用对象在数据库上操作。
经过半个月的研究和努力,现在就在这里,它带有恶魔般的步骤。
什么是面向对象的数据库操作?
许多朋友可能没有听说过,所以我会首先在另一种语言的代码中举一个简单的例子。
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->orderBy('name', 'desc')
->get();
如上图所示,在PHP代码中,一个简单的数据库查询语句,PHP朋友熟悉。
此处出现的用户,ID和名称都是字符串,需要手动编码,缺点很明显:
-
在开发过程中,很容易产生拼写错误。
-
当重构或更改字段和表名时,它可能是头痛。由于它们分布在项目的各个地方,因此您需要非常小心,并正确找到它们,然后对其进行修改。缺少一个就像定时炸弹。
让我们看一下如何在.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文档
我还强烈邀请朋友使用AORM,如果您在使用过程中遇到任何问题,请随时通过各种渠道与我联系。