上一篇文章《Go语言MVC模式Web开发实战(八)集成redis框架且解决jwt安全问题》我们集成redis做了缓存。但是之前我们引入了mysql数据库,所以这里我们添加service层做一下数据库查询。
1、创建库表数据
首先我们在mysql中创建一个goods表,然后添加几条数据,示例如下:
CREATE TABLE `goods` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL COMMENT '商品名称', `stock` int(11) DEFAULT NULL COMMENT '商品库存', `category_id` int(11) DEFAULT NULL COMMENT '商品分类id', `des` varchar(255) DEFAULT NULL COMMENT '商品描述', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `test`.`goods` (`id`, `name`, `stock`, `category_id`, `des`) VALUES (1, 'iphone15', 23, 1, 'iphone15xxxxxxx'); INSERT INTO `test`.`goods` (`id`, `name`, `stock`, `category_id`, `des`) VALUES (2, 'iphone14', 20, 1, 'iphone14xxxxxxx'); INSERT INTO `test`.`goods` (`id`, `name`, `stock`, `category_id`, `des`) VALUES (3, 'mi 15', 19, 2, '小米手机xxxxx');
做好了数据之后,我们的示例图如下:
2、创建model
这里是演示项目,所以我们不做DTO层转换,直接使用model即可,所以在models包下创建一个goods.go文件:
完整的goods.go示例代码如下:
package models
type Goods struct {
Name string `json:"name"`
Stock int `json:"stock"`
CategoryId int `json:"category_id"`
Des string `json:"des"`
}3、创建service层
接下来我们创建一个service的包,并且在下面创建一个goodService.go文件,专门用于编写goods相关的业务
goodService.go的完整示例代码如下:
package service
import (
"awesomeProject/config"
"awesomeProject/models"
)
func ListAllGoods() []models.Goods {
var goods []models.Goods
config.DB.Table("goods").Find(&goods)
return goods
}
func ListGoodsById(goodId int) models.Goods {
var goods models.Goods
config.DB.Table("goods").Where("id = ?", goodId).First(&goods)
return goods
}4、编写controller
接下来我们在controller包下的goodsController.go文件中编写接口,并且调用service层的代码。完整的goodsController.go代码示例如下:
package controllers
import (
"awesomeProject/response"
"awesomeProject/service"
"github.com/gin-gonic/gin"
"log"
"net/http"
"strconv"
)
func ListGoods(c *gin.Context) {
username, _ := c.Get("username")
log.Println("通过中间件解析获取到的username是:", username)
goods := service.ListAllGoods()
rs := response.BaseResponse{
http.StatusOK,
"请求成功",
goods,
}
c.JSON(http.StatusOK, rs)
}
func GetGoodsById(c *gin.Context) {
goodid, err := strconv.Atoi(c.Query("id"))
if err != nil {
panic(err)
}
goods := service.ListGoodsById(goodid)
rs := response.BaseResponse{
http.StatusOK,
"请求成功",
goods,
}
c.JSON(http.StatusOK, rs)
}5、添加路由
接着我们把编写的goods相关的接口注册到路由中去,这里改造的是routes包下的routes.go文件:
package routes
import (
"awesomeProject/controllers"
"awesomeProject/middleware"
"github.com/gin-gonic/gin"
)
func SetupRouter() *gin.Engine {
r := gin.Default()
r.POST("/resgister", controllers.RegisterUser)
r.POST("login", controllers.LoginUser)
authorized := r.Group("/api")
authorized.Use(middleware.AuthenticateJWT())
{
authorized.GET("/listgoods", controllers.ListGoods)
authorized.GET("/getGoodsById", controllers.GetGoodsById)
}
return r
}6、启动测试
最后我们把项目启动起来进行测试,首先获取所有商品:
接着获取商品详情:
可以看到这里的请求非常的顺利。
以上就是演示MVC模式下的web,在添加service层之后操作数据库的案例。
最后按照惯例,附上本案例的源码,登录后即可下载。














还没有评论,来说两句吧...