W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
// 獲取默認(rèn)配置的數(shù)據(jù)庫對(duì)象(配置名稱為"default")
db := g.DB()
使用字符串、?slice
?參數(shù)類型。當(dāng)使用?slice
?參數(shù)類型時(shí),預(yù)處理占位符只需要一個(gè)??
?即可。
// SELECT * FROM user WHERE uid IN(100,10000,90000)
db.Model("user").Where("uid IN(?,?,?)", 100, 10000, 90000).All()
db.Model("user").Where("uid", g.Slice{100, 10000, 90000}).All()
// SELECT * FROM user WHERE gender=1 AND uid IN(100,10000,90000)
db.Model("user").Where("gender=? AND uid IN(?)", 1, g.Slice{100, 10000, 90000}).All()
// SELECT COUNT(*) FROM user WHERE age in(18,50)
db.Model("user").Where("age IN(?,?)", 18, 50).Count()
db.Model("user").Where("age", g.Slice{18, 50}).Count()
使用任意?map
?參數(shù)類型。
// SELECT * FROM user WHERE gender=1 AND uid IN(100,10000,90000)
db.Model("user").Where(g.Map{
"gender" : 1,
"uid" : g.Slice{100,10000,90000},
}).All()
使用?struct
?參數(shù)類型,注意查詢條件的順序和?struct
?的屬性定義順序有關(guān)。
type User struct {
Id []int `orm:"uid"`
Gender int `orm:"gender"`
}
// SELECT * FROM `user` WHERE uid IN(100,10000,90000) AND gender=1
db.Model("user").Where(User{
"gender" : 1,
"uid" : []int{100, 10000, 90000},
}).All()
為提高易用性,當(dāng)傳遞的?slice
?參數(shù)為空或?nil
?時(shí),查詢并不會(huì)報(bào)錯(cuò),而是轉(zhuǎn)換為一個(gè)?false
?條件語句。
// SELECT * FROM `user` WHERE 0=1
db.Model("user").Where("uid", g.Slice{}).All()
db.Model("user").Where("uid", nil).All()
?ORM
?同時(shí)也提供了常用條件方法?WhereIn/WhereNotIn/WhereOrIn/WhereOrNotIn
?方法,用于常用的?In
?查詢條件過濾。方法定義如下:
func (m *Model) WhereIn(column string, in interface{}) *Model
func (m *Model) WhereNotIn(column string, in interface{}) *Model
func (m *Model) WhereOrIn(column string, in interface{}) *Model
func (m *Model) WhereOrNotIn(column string, in interface{}) *Model
使用示例:
// SELECT * FROM `user` WHERE `gender`=1 AND `type` IN(1,2,3)
db.Model("user").Where("gender", 1).WhereIn("type", g.Slice{1,2,3}).All()
// SELECT * FROM `user` WHERE `gender`=1 AND `type` NOT IN(1,2,3)
db.Model("user").Where("gender", 1).WhereNotIn("type", g.Slice{1,2,3}).All()
// SELECT * FROM `user` WHERE `gender`=1 OR `type` IN(1,2,3)
db.Model("user").Where("gender", 1).WhereOrIn("type", g.Slice{1,2,3}).All()
// SELECT * FROM `user` WHERE `gender`=1 OR `type` NOT IN(1,2,3)
db.Model("user").Where("gender", 1).WhereOrNotIn("type", g.Slice{1,2,3}).All()
// SELECT * FROM `user` WHERE name like '%john%'
db.Model("user").Where("name like ?", "%john%").All()
// SELECT * FROM `user` WHERE birthday like '1990-%'
db.Model("user").Where("birthday like ?", "1990-%").All()
從?goframe v1.16
?版本開始,?goframe
?的?ORM
?同時(shí)也提供了常用條件方法?WhereLike/WhereNotLike/WhereOrLike/WhereOrNotLike
?方法,用于常用的?Like
?查詢條件過濾。方法定義如下:
func (m *Model) WhereLike(column string, like interface{}) *Model
func (m *Model) WhereNotLike(column string, like interface{}) *Model
func (m *Model) WhereOrLike(column string, like interface{}) *Model
func (m *Model) WhereOrNotLike(column string, like interface{}) *Model
使用示例:
// SELECT * FROM `user` WHERE `gender`=1 AND `name` LIKE 'john%'
db.Model("user").Where("gender", 1).WhereLike("name", "john%").All()
// SELECT * FROM `user` WHERE `gender`=1 AND `name` NOT LIKE 'john%'
db.Model("user").Where("gender", 1).WhereNotLike("name", "john%").All()
// SELECT * FROM `user` WHERE `gender`=1 OR `name` LIKE 'john%'
db.Model("user").Where("gender", 1).WhereOrLike("name", "john%").All()
// SELECT * FROM `user` WHERE `gender`=1 OR `name` NOT LIKE 'john%'
db.Model("user").Where("gender", 1).WhereOrNotLike("name", "john%").All()
我們直接將統(tǒng)計(jì)方法使用在?Fields
?方法上,例如:
// SELECT MIN(score) FROM `user` WHERE `uid`=1
db.Model("user").Fields("MIN(score)").Where("uid", 1).Value()
// SELECT MAX(score) FROM `user` WHERE `uid`=1
db.Model("user").Fields("MAX(score)").Where("uid", 1).Value()
// SELECT AVG(score) FROM `user` WHERE `uid`=1
db.Model("user").Fields("AVG(score)").Where("uid", 1).Value()
// SELECT SUM(score) FROM `user` WHERE `uid`=1
db.Model("user").Fields("SUM(score)").Where("uid", 1).Value()
從?goframe v1.16
?版本開始,?goframe
?的?ORM
?同時(shí)也提供了常用統(tǒng)計(jì)方法?Min/Max/Avg/Sum
?方法,用于常用的字段統(tǒng)計(jì)查詢。方法定義如下:
func (m *Model) Min(column string) (float64, error)
func (m *Model) Max(column string) (float64, error)
func (m *Model) Avg(column string) (float64, error)
func (m *Model) Sum(column string) (float64, error)
上面的示例使用快捷統(tǒng)計(jì)方法改造后:
// SELECT MIN(`score`) FROM `user` WHERE `uid`=1
db.Model("user").Where("uid", 1).Min("score")
// SELECT MAX(`score`) FROM `user` WHERE `uid`=1
db.Model("user").Where("uid", 1).Max("score")
// SELECT AVG(`score`) FROM `user` WHERE `uid`=1
db.Model("user").Where("uid", 1).Avg("score")
// SELECT SUM(`score`) FROM `user` WHERE `uid`=1
db.Model("user").Where("uid", 1).Sum("score")
// SELECT COUNT(1) FROM `user` WHERE `birthday`='1990-10-01'
db.Model("user").Where("birthday", "1990-10-01").Count()
// SELECT COUNT(uid) FROM `user` WHERE `birthday`='1990-10-01'
db.Model("user").Fields("uid").Where("birthday", "1990-10-01").Count()
從?goframe v1.16
?版本開始,?goframe
?的?ORM
?同時(shí)也提供了一個(gè)按照字段進(jìn)行?Count
?的常用方法?CountColumn
?。方法定義如下:
func (m *Model) CountColumn(column string) (int, error)
使用示例:
db.Model("user").Where("birthday", "1990-10-01").CountColumn("uid")
// SELECT DISTINCT uid,name FROM `user`
db.Model("user").Fields("DISTINCT uid,name").All()
// SELECT COUNT(DISTINCT uid,name) FROM `user`
db.Model("user").Fields("DISTINCT uid,name").Count()
從?goframe v1.16
?版本開始,?goframe
?的?ORM
?同時(shí)也提供了一個(gè)字段唯一性過濾標(biāo)記方法?Distinct
?。方法定義如下:
func (m *Model) Distinct() *Model
使用示例:
// SELECT COUNT(DISTINCT `name`) FROM `user`
db.Model("user").Distinct().CountColumn("name")
// SELECT COUNT(DISTINCT uid,name) FROM `user`
db.Model("user").Distinct().CountColumn("uid,name")
// SELECT * FROM `user ` WHERE age between 18 and 20
db.Model("user").Where("age between ? and ?", 18, 20).All()
從?goframe v1.16
?版本開始,?goframe
?的?ORM
?同時(shí)也提供了常用條件方法?WhereBetween/WhereNotBetween/WhereOrBetween/WhereOrNotBetween
?方法,用于常用的?Between
?查詢條件過濾。方法定義如下:
func (m *Model) WhereBetween(column string, min, max interface{}) *Model
func (m *Model) WhereNotBetween(column string, min, max interface{}) *Model
func (m *Model) WhereOrBetween(column string, min, max interface{}) *Model
func (m *Model) WhereOrNotBetween(column string, min, max interface{}) *Model
使用示例:
// SELECT * FROM `user` WHERE `gender`=0 AND `age` BETWEEN 16 AND 20
db.Model("user").Where("gender", 0).WhereBetween("age", 16, 20).All()
// SELECT * FROM `user` WHERE `gender`=0 AND `age` NOT BETWEEN 16 AND 20
db.Model("user").Where("gender", 0).WhereNotBetween("age", 16, 20).All()
// SELECT * FROM `user` WHERE `gender`=0 OR `age` BETWEEN 16 AND 20
db.Model("user").Where("gender", 0).WhereOrBetween("age", 16, 20).All()
// SELECT * FROM `user` WHERE `gender`=0 OR `age` NOT BETWEEN 16 AND 20
db.Model("user").Where("gender", 0).WhereOrNotBetween("age", 16, 20).All()
?ORM
?提供了常用條件方法?WhereNull/WhereNotNull/WhereOrNull/WhereOrNotNull
?方法,用于常用的?Null
?查詢條件過濾。方法定義如下:
func (m *Model) WhereNull(columns ...string) *Model
func (m *Model) WhereNotNull(columns ...string) *Model
func (m *Model) WhereOrNull(columns ...string) *Model
func (m *Model) WhereOrNotNull(columns ...string) *Model
使用示例:
// SELECT * FROM `user` WHERE `created_at` > '2021-05-01 00:00:00' AND `inviter` IS NULL
db.Model("user").Where("created_at>?", gtime.New("2021-05-01")).WhereNull("inviter").All()
// SELECT * FROM `user` WHERE `created_at` > '2021-05-01 00:00:00' AND `inviter` IS NOT NULL
db.Model("user").Where("created_at>?", gtime.New("2021-05-01")).WhereNotNull("inviter").All()
// SELECT * FROM `user` WHERE `created_at` > '2021-05-01 00:00:00' OR `inviter` IS NULL
db.Model("user").Where("created_at>?", gtime.New("2021-05-01")).WhereOrNull("inviter").All()
// SELECT * FROM `user` WHERE `created_at` > '2021-05-01 00:00:00' OR `inviter` IS NOT NULL
db.Model("user").Where("created_at>?", gtime.New("2021-05-01")).WhereOrNotNull("inviter").All()
同時(shí),這幾個(gè)方法的參數(shù)支持多個(gè)字段輸入,例如:
// SELECT * FROM `user` WHERE `created_at` > '2021-05-01 00:00:00' AND `inviter` IS NULL AND `creator` IS NULL
db.Model("user").Where("created_at>?", gtime.New("2021-05-01")).WhereNull("inviter", "creator").All()
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: