共计 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…
外围长处:
- 反对 应用构造体(对象) 操作数据库,让你的零碎更强壮
- 反对 MySQL,MsSQL,Postgres,Sqlite3 数据库,让你的零碎更容易扩大
- 反对 链式操作,让你的开发效率更高
- 反对 空值查问或更新,让你的开发体验更好
- 反对 迁徙数据结构,让你的数据迁徙更不便
目前 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 的我的项目页面,有我集体微信,能够加我。