平時我們用 Beego 開發小專案的時候,經常會遇到一個這樣的問題,就是同樣的業務 ,程式碼我們要重複寫好多次,改的只是一個小小的地方。即使是複製也會顯得很繁瑣。所以我不自量力搞了個工具幫助我們快速實現增刪查改操作。下面來介紹一下這個小工具。
Gii beego 自動化程式碼生成
1.介紹
Gii 是一個為了協助快速開發 beego 專案而建立的專案,通過 Gii 您可以很容易地為你已存在的資料表在你指定的目錄建立 Model 以及 Controller 。它基於 beego 為你寫好created ,update,put,以及 delete 等操作方法。
注意不能完全依靠 Gii 為你生成的東西,你需要檢查一下再進行使用。
2.安裝
您可以通過如下的方式安裝 bee 工具:
go get github.com/1920853199/go-gii
3.使用
package main
import (
"github.com/1920853199/go-gii"
)
func main() {
source := "xxxx:xxxxxxxx@tcp(127.0.0.1)/abc"
gii.Column(source,"article","")
//beego.Run()
}
引數介紹
- 第一個引數 source :資料庫連線資訊
- 第二個引數 name 資料表名稱
- 第三個引數 controllerPath 是指定 Controller 生成的路徑
直接執行這個檔案後會在 beego 專案的目錄的 models下生成對應資料表的 model,在 controller 下的指定路徑生成控制器
結果:
Controller article.go
程式碼
package home
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"github.com/astaxie/beego/validation"
)
type ArticleController struct {
beego.Controller
}
func (c *ArticleController) List() {
limit, _ := beego.AppConfig.Int64("limit") // 一頁的數量
page, _ := c.GetInt64("page", 1) // 頁數
offset := (page - 1) * limit // 偏移量
o := orm.NewOrm()
obj := new(models.Article)
var data []*models.Article
qs := o.QueryTable(obj)
// 獲取資料
_, err := qs.OrderBy("-id").Limit(limit).Offset(offset).All(&data)
if err != nil {
c.Abort("404")
}
/*c.Data["json"]= &data
c.ServeJSON()
c.StopRun()*/
// 統計
count, err := qs.Count()
if err != nil {
c.Abort("404")
}
c.Data["Data"] = &data
c.Data["Count"] = count
c.Data["Limit"] = limit
c.Data["Page"] = page
}
func (c *ArticleController) Put() {
id, err := c.GetInt("id", 0)
if id == 0 {
c.Abort("404")
}
// 基礎資料
o := orm.NewOrm()
obj := new(models.Article)
var data []*models.Article
qs := o.QueryTable(obj)
err = qs.Filter("id", id).One(&data)
if err != nil {
c.Abort("404")
}
c.Data["Data"] = data[0]
}
func (c *ArticleController) Update() {
id, _ := c.GetInt("id", 0)
/*c.Data["json"] = c.Input()
c.ServeJSON()
c.StopRun()*/
response := make(map[string]interface{})
o := orm.NewOrm()
obj := models.Article{Id: id}
if o.Read(&obj) == nil {
// 需要補充修改的資訊
// 如 :obj.Reply = reply
valid := validation.Validation{}
// 補充需要驗證的資訊
// 如:valid.Required(message.Reply, "Reply")
if valid.HasErrors() {
// 如果有錯誤資訊,證明驗證沒通過
// 列印錯誤資訊
for _, err := range valid.Errors {
//log.Println(err.Key, err.Message)
response["msg"] = "新增失敗!"
response["code"] = 500
response["err"] = err.Key + " " + err.Message
c.Data["json"] = response
c.ServeJSON()
c.StopRun()
}
}
if _, err := o.Update(&obj); err == nil {
response["msg"] = "修改成功!"
response["code"] = 200
response["id"] = id
} else {
response["msg"] = "修改失敗!"
response["code"] = 500
response["err"] = err.Error()
}
} else {
response["msg"] = "修改失敗!"
response["code"] = 500
response["err"] = "ID 不能為空!"
}
c.Data["json"] = response
c.ServeJSON()
c.StopRun()
}
func (c *ArticleController) Delete() {
id, _ := c.GetInt("id", 0)
response := make(map[string]interface{})
o := orm.NewOrm()
obj := models.Article{Id: id}
if _, err := o.Delete(&obj); err == nil {
response["msg"] = "刪除成功!"
response["code"] = 200
}else{
response["msg"] = "刪除失敗!"
response["code"] = 500
response["err"] = err.Error()
}
c.Data["json"] = response
c.ServeJSON()
c.StopRun()
}
Model Article.go
程式碼
package models
import (
"github.com/astaxie/beego/orm"
"time"
)
type Article struct {
Id int
Title string
BusinessType string
BusinessName string
DemandType string
Province string
City string
District string
Address string
Content string `orm:"type(text)"`
PublisherId float64
PublishDate time.Time `orm:"type(datetime)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
}
func init() {
// 需要在init中註冊定義的model
orm.RegisterModel(new(Article))
}
實現上可能會存在很多的缺點不足,希望各位大佬不吝賜教。最後如果大家有覺得還有一點點存在的價值的話給個星星鼓勵一下謝謝各位。Github:https://github.com/1920853199/go-gii
本作品採用《CC 協議》,轉載必須註明作者和本文連結