<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
很多人都是從php轉過來的吧,不知道你們有沒有發現,go界的orm並沒有像php的orm一樣好用。這篇文章裡,我們認真的討論下這個問題,並且會在後面提出解決方案。
比如你想實現一個關聯查詢,在php裡,你只需要不斷的使用箭頭函數就可以了。
$users = DB::table('users')->whereIn('id', [1, 2, 3])->orderBy('name', 'desc')->get();
以上程式碼,很簡單實現了對一個表的查詢操作,並且將查詢結果以name做倒序排列,很簡單
但是做同樣的工作,在go裡面就比較麻煩了
如果你使用go的原生查詢的話,你需要寫如下的程式碼
rows, err := db.Query("select * from users where id in (?,?,?) order by name desc", 1, 2, 3)
基本上說,你需要手寫一個完整的sql語句,全手動
什麼!手寫sql語句,不是咱不會寫,關鍵是沒必要手寫啊,是吧。
全手寫可能帶來兩個問題
如果你使用gorm之類的orm工具,可能會這樣寫
db.Where("id in (?)", []int{1,2,3}).Order("create_time desc").Find(&users)
很顯然對比原生的來說,好一些,不用手寫select 等關鍵字了,但是核心問題還是沒解決,還需要手寫 id in (?) 之類的。相當於之前是全手工,現在是半手工半自動了。
我這個例子裡,條件就一個,在實際業務中,查詢條件會有很多,並且數量還不一定,這種半自動的方法還是不太好的。
既然有問題,那就有解決方案。很明顯,最理想的方案就是保持與php的一致。那麼go能做到這樣嗎?
答案是毫無疑問的,可以的。
這裡推薦一個新的資料庫操作庫,可以很方便的完成這樣的工作
tangpanqing/aorm: Operate Database So Easy For GoLang Developer (github.com)
它有一些顯著的特性
我們來看具體使用,就剛才的操作
aorm.Use(db).Table("users").WhereIn("id", []int{1,2,3}).OrderBy("name","desc").GetMany(&users)
對比php的寫法
$users = DB::table('users')->whereIn('id', [1, 2, 3])->orderBy('name', 'desc')->get();
不能說一模一樣吧,那簡直是一模一樣是不是?
我們再來看看如果是查詢條件不確定怎麼辦?
這是列表查詢經常遇到的問題,前端傳過來的資料數量是不一定的,我們需要根據不同的資料,來增加或者減少不同的條件,進而產生不同的sql,查詢不同的結果
var listByWhere []Person var where1 []builder.WhereItem where1 = append(where1, builder.WhereItem{Field: "type", Opt: builder.Eq, Val: 0}) where1 = append(where1, builder.WhereItem{Field: "age", Opt: builder.In, Val: []int{18, 20}}) where1 = append(where1, builder.WhereItem{Field: "money", Opt: builder.Between, Val: []float64{100.1, 200.9}}) where1 = append(where1, builder.WhereItem{Field: "money", Opt: builder.Eq, Val: 100.15}) where1 = append(where1, builder.WhereItem{Field: "name", Opt: builder.Like, Val: []string{"%", "li", "%"}}) aorm.Use(db).Debug(true).Table("person").WhereArr(where1).GetMany(&listByWhere) for i := 0; i < len(listByWhere); i++ { fmt.Println(listByWhere[i]) }
如上,你可以定義一個builder.WhereItem的切片(陣列),然後根據前端傳過來的資訊,來增加和減少這個陣列裡的項,最後將這個查詢陣列,傳遞給aorm進行最後查詢,最終得到結果。
由上面的例子可以看出,和PHP一樣,你只是需要輸入關鍵的欄位名,關鍵的資料這就行了,其他的sql關鍵字,以及多種條件的拼接,aorm庫自動幫你完成了。完美解決語法錯誤問題,以及拼寫錯誤問題。
怎麼樣,香不香?
aorm庫非常的好用,為go工程師帶來了php一般的開發體驗,推薦各位快快用起來。
tangpanqing/aorm: Operate Database So Easy For GoLang Developer (github.com)
以上就是實現像php一樣方便的go ORM資料庫操作範例詳解的詳細內容,更多關於go ORM資料庫操作的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45