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 协议》,转载必须注明作者和本文链接
放错论坛了,应该放到go去
老兄跑错片场了