第十六章 go语言编写MVC程序操作数据库

下面是一个使用 Go 语言编写 MVC 三层架构的项目示例,其中包括了 Service 层接口的定义和实现,数据操作框架使用 GORM,前端交互使用 Gin 框架。

首先,确保已经安装了 gingorm 的相关包:

 

go get -u github.com/gin-gonic/gin
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql # 如果你使用 MySQL 数据库

  

创建以下目录结构:

- main.go
- controllers/
   - user_controller.go
- models/
   - user_model.go
- services/
   - user_service.go
- repositories/
   - user_repository.go

  

在 models 目录下的 user_model.go 中添加以下内容:

 
package models


type User struct {
	//gorm.Model
	ID uint `gorm:"column:id;primary_key"`
	UserName string `gorm:"column:user_name"`
	address string `gorm:"column:address"`

}

  

在 repositories 目录下的 user_repository.go 中添加以下内容:

 
package repositories

import (
	"gorm.io/gorm"
	"go_demo2/models"
)

type UserRepository struct {
	DB *gorm.DB
}

func NewUserRepository(db *gorm.DB) *UserRepository  {
	return &UserRepository{
		DB: db,
	}
}
func (r *UserRepository) GetAllUsers()([]models.User,error)  {
	var users[] models.User
	result :=r.DB.Find(&users)
	if result.Error != nil {
		return nil,result.Error
	}
	return users,nil
}

  

在 services 目录下的 user_service.go 中添加以下内容:

 
package services

import (
	"go_demo2/models"
"go_demo2/repositories"
)

type UserService struct {

	UserRepository * repositories.UserRepository

}

func NewUserService(userRepo *repositories.UserRepository) *UserService  {

	return &UserService{
		UserRepository: userRepo,
	}
}
func (s *UserService) GetAllUsers() ([]models.User,error)  {
		users,err := s.UserRepository.GetAllUsers()
	if err != nil{
		return nil,err
	}
	return  users,nil

}

  

在 controllers 目录下的 user_controller.go 中添加以下内容:

 
package controller

import (
	"github.com/gin-gonic/gin"
	"go_demo2/services"
)

type UserController struct {
	UserService *services.UserService
}

func NewUserController( userService *services.UserService) *UserController {

	return &UserController{
		UserService: userService,
	}
}
func (c *UserController) GetAllUsers(ctx *gin.Context)  {

	users,err := c.UserService.GetAllUsers()
	if err!=nil {
		ctx.JSON(500,gin.H{"error":"没有数据"})
	}
	ctx.JSON(200,users)
}

  

main.go 文件中添加以下内容:

 
package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"go_demo2/services"
	"go_demo2/repositories"
	"go_demo2/controller"
)

func createConnection()( db *gorm.DB,err error)  {

	dsn := "root:root@tcp(127.0.0.1:3306)/golang?charset=utf8mb4&parseTime=True&loc=Local"
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		//panic("Failed to connect to database")
	return nil,err
	}
	return db,nil

}

func main()  {
	r := gin.Default()
	db,err := createConnection()
	if err!=nil{
		fmt.Println(err)
		panic("无法连接到数据库")
	}
userRepo :=	repositories.NewUserRepository(db)
useService :=	services.NewUserService(userRepo)
userController :=	controller.NewUserController(useService)
r.GET("/users",userController.GetAllUsers)
r.Run(":8099")
}

  

上述示例中,我们将数据操作封装到了 Repository 层,业务逻辑处理放在了 Service 层,控制器负责处理路由请求。这样可以实现 MVC 三层架构。

main.go 文件中,根据你的数据库信息修改 createConnection 函数中的连接字符串。

运行该项目:

go run main.go

  

然后在浏览器中访问 http://localhost:8080/users,将返回用户数据的 JSON 格式响应。

这只是一个简单的示例,你可以根据你的需求和业务逻辑进行修改和扩展。希望这能帮助你开始构建基于 GORM 和 Gin 的 MVC 三层架构项目

 

 
posted @ 2023-07-17 17:58  郎小乐  阅读(171)  评论(0)    收藏  举报