项目截图
1.数据库连接配置 DbConfigUtil.go
- package config
-
-
-
- import (
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- "gorm.io/gorm/schema"
- )
-
- var GormDb *gorm.DB
-
- func init() {
- var err error
- sqlStr := "root:123456@tcp(localhost:3306)/ry?charset=utf8mb4&parseTime=true&loc=Local"
- // 关于配置可以参考 https://gorm.io/zh_CN/docs/gorm_config.html
- GormDb, err = gorm.Open(mysql.Open(sqlStr), &gorm.Config{
- Logger: logger.Default.LogMode(logger.Info),
- //DisableForeignKeyConstraintWhenMigrating: true, // 禁止创建外键
- NamingStrategy: schema.NamingStrategy{ // 给创建表时候使用的
- SingularTable: true,
- // 全部的表名前面加前缀
- //TablePrefix: "mall_",
- },
- })
- if err != nil {
- fmt.Println("数据库连接错误", err)
- return
- }
- }
-
2.实体类以及 orm关系定义
UserController.go
- package entity
-
- import "gin/config"
-
-
- //多表 orm
- //https://blog.csdn.net/kuangshp128/article/details/121139091
-
- //用户表 sys_user
- type SysUserEntity struct {
- UserId int `gorm:"column:user_id"`
- UserName string `gorm:"column:user_name"`
- NickName string `gorm:"column:nick_name"`
- DeptId string `gorm:"column:dept_id"`
- sex string `gorm:"column:sex"`
- }
-
-
- //单位表 sys_dept
- type SysDeptEntity struct {
- DeptId int `gorm:"column:dept_id"`
- ParentId string `gorm:"column:parent_id"`
- DeptName string `gorm:"column:dept_name"`
- CreateBy string `gorm:"column:create_by"`
- UpdateTime string `gorm:"column:update_time"`
- }
-
-
-
- func (SysUserEntity) TableName() string {
- return "sys_user"
- }
- func (SysDeptEntity) TableName() string {
- return "sys_dept"
- }
-
-
- func init() {
- config.GormDb.AutoMigrate(&SysUserEntity{}, &SysDeptEntity{})
- }
3.接口
UserController.go
-
- /***
- 1.多表 联合 orm
- */
- func GetByUserJoinList(c *gin.Context) {
- //申明新对象
- user := &entity.SysUserEntity{}
-
- //获取分页参数
- pageNum := c.Query("pageNum")
- pageSize := c.Query("pageSize")
- fmt.Println("分页参数分别为 :" + pageNum + "|" + pageSize)
-
- list := dao.GetByUserJoinList(c, (*entity.SysUserEntity)(user))
- i := len(list)
- fmt.Print(i)
- common.ReturnSucess(c, 200, "查询成功", list, int64(len(list)))
- }
4.实现
-
- //多表联合orm
- func GetByUserJoinList(c *gin.Context, user *entity.SysUserEntity) []map[string]interface{} {
- //查收过滤条件拼装
- // var userName = user.UserName
-
- //申明一个数组
- //var userList []*User
-
- var resultList []map[string]interface{}
-
- err := config.GormDb.Model(&entity.SysUserEntity{}).Table("sys_user as user").Select("user.user_id as deptId", "user.user_name as userName", "user.nick_name nickName", "dept.dept_name as deptName").
- Joins("LEFT JOIN sys_dept as dept on user.dept_id = dept.dept_id").Where("1 = 1").Scan(&resultList).Error
-
- if err != nil {
- log.Println("查询用户失败,原因:", err)
- // 根据具体错误情况进行处理,比如记录日志、返回错误信息给调用者等
- errToJson := MapToJson(err)
- //主要错误信息提取
- common.ReturnError(c, 500, /*err*/ errToJson, resultList, int64(len(resultList)))
- panic("代码执行异常,不会进行下一步代码逻辑的调用,以及返回")
- }
-
- return resultList
- }
5.正确返回数据截图
6.错误时的异常定义及返回
7.window环境打包成 .exe文件
在 mian.go 文件目录下 执行 go build main.go
7.2 运行打包完的
7.3 打包完的服务测试