
models
nav.go
package models
type Nav struct {
Id int `json:"id"`
Title string `json:"title"`
Url string `json:"url"`
Status int `json:"status"`
Sort int `json:"sort"`
}
func (n Nav) TableName() string {
return "nav"
}
controllers
nav.go
package controllers
import (
"beegogorm/models"
"github.com/astaxie/beego"
)
type NavController struct {
beego.Controller
}
func (c *NavController) Get() {
// 查詢全部數據
nav := []models.Nav{} // nav實例,查詢的數據是集合
models.DB.Find(&nav) // &nav 把查到的數據賦值給nav
// 查詢一條數據
nav := models.Nav{Id: 3} // 獲取Id等於3的數據
models.DB.Find(&nav)
/*
1、Where條件
=
<
>
<=
>=
!=
IS NOT NULL
IS NULL
BETWEEN AND
NOT BETWEEN AND
IN
OR
AND
NOT
LIKE
*/
// 查詢id大於3的數據
nav := []models.Nav{}
models.DB.Where("id<3").Find(&nav)
// 查詢id大於5的數據
var n = 5
nav := []models.Nav{}
models.DB.Where("id>?", n).Find(&nav) // 動態的數據使用占位符
var n1 = 3
var n2 = 9
nav := []models.Nav{}
models.DB.Where("id > ? AND id < ?", n1, n2).Find(&nav)
// 查詢id等於3 5 6的數據
nav := []models.Nav{}
models.DB.Where("id in (?)", []int{3, 5, 6}).Find(&nav)
// 查詢標題有 會 的數據
nav := []models.Nav{}
models.DB.Where("title like ?", "%會%").Find(&nav)
// 查詢id在什么之間
nav := []models.Nav{}
models.DB.Where("id between ? and ?", 3, 6).Find(&nav)
/*
2、Or 條件
*/
nav := []models.Nav{}
models.DB.Where("id=? OR id=?", 2, 3).Find(&nav)
// 另一種寫法
nav := []models.Nav{}
models.DB.Where("id=?", 2).Or("id=?", 3).Or("id=4").Find(&nav)
/*
3、選擇字段查詢
*/
nav := []models.Nav{}
models.DB.Select("id, title, url").Find(&nav)
/*
4、SubQuery 子查詢
models.DB.Table("user").Select("avg(age)").SubQuery()
*/
user := []models.User{}
// 先查出平均年齡 models.DB.Table("user").Select("avg(age)").SubQuery()
// 在當做參數傳給問號
// 在Find一下
models.DB.Where("age<?", models.DB.Table("user").Select("avg(age)").SubQuery()).Find(&user)
c.Data["json"] = user
c.ServeJSON()
/*
5、排序 Limit 、Offset
*/
nav := []models.Nav{}
// id Asc 按照id進行升序排序
// desc 降序
models.DB.Where("id>2").Order("id Asc").Find(&nav)
nav := []models.Nav{}
models.DB.Where("id>2").Order("sort Desc").Order("id Asc").Find(&nav)
// 只要前面兩條
nav := []models.Nav{}
models.DB.Where("id>1").Limit(2).Find(&nav)
// 跳過2條查詢2條
nav := []models.Nav{}
models.DB.Where("id>1").Offset(2).Limit(2).Find(&nav)
/*
6、總數
*/
// 分頁時用到
nav := []models.Nav{}
var num int
models.DB.Where("id > ?", 2).Find(&nav).Count(&num)
c.Data["json"] = num
c.ServeJSON()
// 上面每一個nav,都需要封裝和返回,只寫一個在這
c.Data["json"] = nav // 封裝json
c.ServeJSON() // 返回json
}
