Beego框架API开发篇

数据库配置

conf/app.conf 是默认的配置文件,也可添加自定义配置

...
# 下面是关于mysql数据库的配置参数
mysql_user = "root"
mysql_password = "root"
mysql_host = "127.0.0.1:3306"
mysql_dbname = "gotest"

配置读取
在需要配置参数的地方,可以通过 beego.AppConfig 对象的函数读取配置

web.AppConfig.String("mysql_user")
web.AppConfig.String("mysql_password")
web.AppConfig.String("mysql_host")
web.AppConfig.String("mysql_dbname")

数据库连接

打开根目录下的main.go入口文件,程序执行时会先执行main函数,如果存在init函数,则会先执行init函数,我们可以把orm连接数据库操作写在main函数或者init函数中

导入包

import (
    // 导入orm包
    "github.com/beego/beego/v2/client/orm"
    // 导入mysql驱动
    _ "github.com/go-sql-driver/mysql"
)

连接数据库代码

func  init() {
     username, _ := web.AppConfig.String("mysql_user")
     password, _ := web.AppConfig.String("mysql_password")
     host, _ := web.AppConfig.String("mysql_host")
     dbname, _ := web.AppConfig.String("mysql_dbname")

     orm.RegisterDataBase("default", "mysql", username+":"+password+"@tcp("+host+")/"+dbname+"?charset=utf8&parseTime=true&loc=Local")

     // 打开调试模式,方便查看生成的sql语句
     orm.Debug = true
}

设计数据表

CREATE TABLE `goods` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `goods_name` varchar(20) DEFAULT NULL COMMENT '商品名',
  `price` decimal(10,2) unsigned NOT NULL COMMENT '价格',
  `num` int(10) unsigned NOT NULL COMMENT '数量',
   PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8

创建数据库/表

连接数据库命令行或数据库管理软件,创建gotest数据库和goods表

设计 api 接口

项目里已自带了user控制器,这里就用goods举例吧,begoo默认遵循的是restful api风格

请求方法 路由 说明
POST /api/v1/goods 创建一个商品
GET /api/v1/goods/:id 获取一个商品
GET /api/v1/goods/:id 获取一个商品
GET /api/v1/goods 获取商品列表
PUT /api/v1/goods/:id 更新一个商品
DELETE /api/v1/goods/:id 删除一个商品

创建代码

beego可以根据数据库表内容生成控制器、模型的代码,分别在controllers和models下

bee generate appcode -tables="goods" -driver=mysql -conn="root:root@tcp(127.0.0.1:3306)/gotest" -level=3

自动生成的代码可能有些问题,我本地是调试不通,最好自己重写一下控制器逻辑

POST请求处理逻辑

controllers/goods.go
导入包

import (
"github.com/beego/beego/v2/client/orm"
)

修改POST请求处理逻辑

func (c *GoodsController) Post() {
    // 创建orm对象, 后面都是通过orm对象操作数据库
    db := orm.NewOrm()

    //组装数据
    var goods models.Goods

    numStr := c.GetString("Num")   //获取整型应该这么获取 先获取整型字符串
    num, _ := strconv.Atoi(numStr) // 再转int

    goods.Num = num //再赋值
    goods.GoodsName = c.GetString("GoodsName")
    goods.Price, _ = c.GetFloat("Price")

    //执行插入
    id, err := db.Insert(&goods)

    if err != nil {
        fmt.Println("插入失败")
        c.Data["json"] = "插入失败"
    } else {
        // 插入成功会返回插入数据自增字段,生成的id

        //golang int64 转换为 golang string 
        strInt64 := strconv.FormatInt(id, 10)

        c.Data["json"] = "新插入数据的id为:" + strInt64 //strconv.Itoa(id16)
    }
    c.ServeJSON()
}

需要注意

  • num不是整型字符串时,转整型时会变成0
  • 对于整型字符串的传参,需要用GetString获取再转strconv.Atoi转成int
  • 整型往字符串里拼接时,需要先用FormatInt转成字符串

配置路由
代码生成后会提示你是否覆盖之前的路由,需要手动输入Yes,不是很实用,建议不要去覆盖,自己添加路由即可

    ...
    beego.NSNamespace("/goods",
        beego.NSInclude(
            &controllers.UserController{},
        ),
    ),

生成路由文件
不执行这个可能会报404,路由配置不生效

bee generate routers

尝试调用

用apifox或者postman都可以

新增

新增,查询、删除、修改、列表

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 3
云客网络工作室

放错论坛了,应该放到go去

10个月前 评论
三餐四季 (楼主) 10个月前

老兄跑错片场了

10个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!