Fork me on GitHub

beego 代码自动生成器 - Gii

平时我们用 Beego 开发小项目的时候,经常会遇到一个这样的问题,就是同样的业务 ,代码我们要重复写好多次,改的只是一个小小的地方。即使是复制也会显得很繁琐。所以我不自量力搞了个工具帮助我们快速实现增删查改操作。下面来介绍一下这个小工具。

Gii beego 自动化代码生成

1.介绍

Gii 是一个为了协助快速开发 beego 项目而创建的项目,通过 Gii 您可以很容易地为你已存在的数据表在你指定的目录创建 Model 以及 Controller 。它基于 beego 为你写好created ,update,put,已经 delete 等操作方法。

注意不能完全依靠 Gii 为你生成的东西,你需要检查一下再进行使用。

2.安装

您可以通过如下的方式安装 bee 工具:

  1. go get github.com/1920853199/go-gii

3.使用

  1. package main
  2. import (
  3. "github.com/1920853199/go-gii"
  4. )
  5. func main() {
  6. source := "xxxx:xxxxxxxx@tcp(127.0.0.1)/abc"
  7. gii.Column(source,"article","")
  8. //beego.Run()
  9. }

参数介绍

  1. 第一个参数 source :数据库连接信息
  2. 第二个参数 name 数据表名称
  3. 第三个参数 controllerPath 是指定 Controller 生成的路径

直接执行这个文件后会在 beego 项目的目录的 models下生成对应数据表的 model,在 controller 下的指定路径生成控制器

结果:

Controller article.go代码

  1. package home
  2. import (
  3. "github.com/astaxie/beego"
  4. "github.com/astaxie/beego/orm"
  5. "github.com/astaxie/beego/validation"
  6. )
  7. type ArticleController struct {
  8. beego.Controller
  9. }
  10. func (c *ArticleController) List() {
  11. limit, _ := beego.AppConfig.Int64("limit") // 一页的数量
  12. page, _ := c.GetInt64("page", 1) // 页数
  13. offset := (page - 1) * limit // 偏移量
  14. o := orm.NewOrm()
  15. obj := new(models.Article)
  16. var data []*models.Article
  17. qs := o.QueryTable(obj)
  18. // 获取数据
  19. _, err := qs.OrderBy("-id").Limit(limit).Offset(offset).All(&data)
  20. if err != nil {
  21. c.Abort("404")
  22. }
  23. /*c.Data["json"]= &data
  24. c.ServeJSON()
  25. c.StopRun()*/
  26. // 统计
  27. count, err := qs.Count()
  28. if err != nil {
  29. c.Abort("404")
  30. }
  31. c.Data["Data"] = &data
  32. c.Data["Count"] = count
  33. c.Data["Limit"] = limit
  34. c.Data["Page"] = page
  35. }
  36. func (c *ArticleController) Put() {
  37. id, err := c.GetInt("id", 0)
  38. if id == 0 {
  39. c.Abort("404")
  40. }
  41. // 基础数据
  42. o := orm.NewOrm()
  43. obj := new(models.Article)
  44. var data []*models.Article
  45. qs := o.QueryTable(obj)
  46. err = qs.Filter("id", id).One(&data)
  47. if err != nil {
  48. c.Abort("404")
  49. }
  50. c.Data["Data"] = data[0]
  51. }
  52. func (c *ArticleController) Update() {
  53. id, _ := c.GetInt("id", 0)
  54. /*c.Data["json"] = c.Input()
  55. c.ServeJSON()
  56. c.StopRun()*/
  57. response := make(map[string]interface{})
  58. o := orm.NewOrm()
  59. obj := models.Article{Id: id}
  60. if o.Read(&obj) == nil {
  61. // 需要补充修改的信息
  62. // 如 :obj.Reply = reply
  63. valid := validation.Validation{}
  64. // 补充需要验证的信息
  65. // 如:valid.Required(message.Reply, "Reply")
  66. if valid.HasErrors() {
  67. // 如果有错误信息,证明验证没通过
  68. // 打印错误信息
  69. for _, err := range valid.Errors {
  70. //log.Println(err.Key, err.Message)
  71. response["msg"] = "新增失败!"
  72. response["code"] = 500
  73. response["err"] = err.Key + " " + err.Message
  74. c.Data["json"] = response
  75. c.ServeJSON()
  76. c.StopRun()
  77. }
  78. }
  79. if _, err := o.Update(&obj); err == nil {
  80. response["msg"] = "修改成功!"
  81. response["code"] = 200
  82. response["id"] = id
  83. } else {
  84. response["msg"] = "修改失败!"
  85. response["code"] = 500
  86. response["err"] = err.Error()
  87. }
  88. } else {
  89. response["msg"] = "修改失败!"
  90. response["code"] = 500
  91. response["err"] = "ID 不能为空!"
  92. }
  93. c.Data["json"] = response
  94. c.ServeJSON()
  95. c.StopRun()
  96. }
  97. func (c *ArticleController) Delete() {
  98. id, _ := c.GetInt("id", 0)
  99. response := make(map[string]interface{})
  100. o := orm.NewOrm()
  101. obj := models.Article{Id: id}
  102. if _, err := o.Delete(&obj); err == nil {
  103. response["msg"] = "删除成功!"
  104. response["code"] = 200
  105. }else{
  106. response["msg"] = "删除失败!"
  107. response["code"] = 500
  108. response["err"] = err.Error()
  109. }
  110. c.Data["json"] = response
  111. c.ServeJSON()
  112. c.StopRun()
  113. }

Model Article.go代码

  1. package models
  2. import (
  3. "github.com/astaxie/beego/orm"
  4. "time"
  5. )
  6. type Article struct {
  7. Id int
  8. Title string
  9. BusinessType string
  10. BusinessName string
  11. DemandType string
  12. Province string
  13. City string
  14. District string
  15. Address string
  16. Content string `orm:"type(text)"`
  17. PublisherId float64
  18. PublishDate time.Time `orm:"type(datetime)"`
  19. Created time.Time `orm:"auto_now_add;type(datetime)"`
  20. }
  21. func init() {
  22. // 需要在init中注册定义的model
  23. orm.RegisterModel(new(Article))
  24. }

实现上可能会存在很多的缺点不足,希望各位大佬不吝赐教。最后如果大家有觉得还有一点点存在的价值的话给个星星鼓励一下谢谢各位。Github:https://github.com/1920853199/go-gii

2019-09-17 15:55:20  LeeChan 阅读(808) 评论(2) 标签:Go,beego,代码自动生成,原创 分类:技术编程