• golang的多表联合orm


    项目截图

    1.数据库连接配置 DbConfigUtil.go

    1. package config
    2. import (
    3. "fmt"
    4. _ "github.com/go-sql-driver/mysql"
    5. "gorm.io/driver/mysql"
    6. "gorm.io/gorm"
    7. "gorm.io/gorm/logger"
    8. "gorm.io/gorm/schema"
    9. )
    10. var GormDb *gorm.DB
    11. func init() {
    12. var err error
    13. sqlStr := "root:123456@tcp(localhost:3306)/ry?charset=utf8mb4&parseTime=true&loc=Local"
    14. // 关于配置可以参考 https://gorm.io/zh_CN/docs/gorm_config.html
    15. GormDb, err = gorm.Open(mysql.Open(sqlStr), &gorm.Config{
    16. Logger: logger.Default.LogMode(logger.Info),
    17. //DisableForeignKeyConstraintWhenMigrating: true, // 禁止创建外键
    18. NamingStrategy: schema.NamingStrategy{ // 给创建表时候使用的
    19. SingularTable: true,
    20. // 全部的表名前面加前缀
    21. //TablePrefix: "mall_",
    22. },
    23. })
    24. if err != nil {
    25. fmt.Println("数据库连接错误", err)
    26. return
    27. }
    28. }

    2.实体类以及 orm关系定义

    UserController.go

    1. package entity
    2. import "gin/config"
    3. //多表 orm
    4. //https://blog.csdn.net/kuangshp128/article/details/121139091
    5. //用户表 sys_user
    6. type SysUserEntity struct {
    7. UserId int `gorm:"column:user_id"`
    8. UserName string `gorm:"column:user_name"`
    9. NickName string `gorm:"column:nick_name"`
    10. DeptId string `gorm:"column:dept_id"`
    11. sex string `gorm:"column:sex"`
    12. }
    13. //单位表 sys_dept
    14. type SysDeptEntity struct {
    15. DeptId int `gorm:"column:dept_id"`
    16. ParentId string `gorm:"column:parent_id"`
    17. DeptName string `gorm:"column:dept_name"`
    18. CreateBy string `gorm:"column:create_by"`
    19. UpdateTime string `gorm:"column:update_time"`
    20. }
    21. func (SysUserEntity) TableName() string {
    22. return "sys_user"
    23. }
    24. func (SysDeptEntity) TableName() string {
    25. return "sys_dept"
    26. }
    27. func init() {
    28. config.GormDb.AutoMigrate(&SysUserEntity{}, &SysDeptEntity{})
    29. }

    3.接口

    UserController.go

    1. /***
    2. 1.多表 联合 orm
    3. */
    4. func GetByUserJoinList(c *gin.Context) {
    5. //申明新对象
    6. user := &entity.SysUserEntity{}
    7. //获取分页参数
    8. pageNum := c.Query("pageNum")
    9. pageSize := c.Query("pageSize")
    10. fmt.Println("分页参数分别为 :" + pageNum + "|" + pageSize)
    11. list := dao.GetByUserJoinList(c, (*entity.SysUserEntity)(user))
    12. i := len(list)
    13. fmt.Print(i)
    14. common.ReturnSucess(c, 200, "查询成功", list, int64(len(list)))
    15. }

    4.实现

    1. //多表联合orm
    2. func GetByUserJoinList(c *gin.Context, user *entity.SysUserEntity) []map[string]interface{} {
    3. //查收过滤条件拼装
    4. // var userName = user.UserName
    5. //申明一个数组
    6. //var userList []*User
    7. var resultList []map[string]interface{}
    8. 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").
    9. Joins("LEFT JOIN sys_dept as dept on user.dept_id = dept.dept_id").Where("1 = 1").Scan(&resultList).Error
    10. if err != nil {
    11. log.Println("查询用户失败,原因:", err)
    12. // 根据具体错误情况进行处理,比如记录日志、返回错误信息给调用者等
    13. errToJson := MapToJson(err)
    14. //主要错误信息提取
    15. common.ReturnError(c, 500, /*err*/ errToJson, resultList, int64(len(resultList)))
    16. panic("代码执行异常,不会进行下一步代码逻辑的调用,以及返回")
    17. }
    18. return resultList
    19. }

    5.正确返回数据截图

    6.错误时的异常定义及返回

    7.window环境打包成 .exe文件

     在  mian.go 文件目录下  执行 go build main.go

    7.2 运行打包完的

    7.3 打包完的服务测试

  • 相关阅读:
    对Docker基础镜像的思考,该不该选择alpine
    小程序版本审核未通过,需在开发者后台「版本管理—提交审核——小程序订单中心path」设置订单中心页path,请设置后再提交代码审核
    Spring的声明式事务
    2022年0701-Com.Java.Basis第二课《Java的八大基本数据类型》
    C 基础知识内容
    linux 冷启动热启动
    控制器的功能和工作原理
    WinHex怎么增加数据
    交换机和路由器技术-25-OSPF多区域配置
    Shiro反序列化分析
  • 原文地址:https://blog.csdn.net/weixin_41037490/article/details/143369067