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 协议》,转载必须注明作者和本文链接
三餐四季 的个人博客
关于 LearnKu
放错论坛了,应该放到go去
老兄跑错片场了