上一篇文章《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层之后操作数据库的案例。
最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...