当前位置: 首页 > article >正文

golang的多表联合orm

项目截图

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 打包完的服务测试


http://www.kler.cn/a/374422.html

相关文章:

  • centos 选什么Distribution?flash安装
  • AWD挨打记录
  • Linux笔记--基础入门
  • 问:Redis为什么这么快?
  • window11使用wsl2安装Ubuntu22.04
  • 【K8S系列】Kubernetes 中 NodePort 类型的 Service 无法访问的问题【已解决】
  • 关于回溯与分支限界的一些介绍
  • 【第一个qt项目的实现和介绍以及程序分析】【正点原子】嵌入式Qt5 C++开发视频
  • 神经网络:解析人工智能的智慧基石
  • WPF+MVVM案例实战(十四)- 封装一个自定义消息弹窗控件(下)
  • 二:Linux学习笔记(第一阶段)-- Linux命令
  • 记一次:Clickhouse同步mysql数据库
  • 基于Spring Boot的医疗陪护系统设计与实现(源码+定制+开发)病患陪护管理平台、医疗服务管理系统、医疗陪护信息平台
  • 【PCL】vs2022配置PCL环境
  • RHCE第三次实验
  • 强大的文本编辑器Notepad++8.4.6 最新版
  • 【回溯】力扣 77.组合
  • [数组基础] 0238. 除自身以外数组的乘积
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解
  • 音频剪辑怎么做?盘点10款高效的音频剪辑工具
  • Android 利用socket 来实现 自动升级apk
  • linux 中文实用型手册 基于RHEL(红帽系)
  • 三网折扣话费充值接口对接详细步骤?
  • 速盾:海外CDN高防解析.提升网站安全与速度
  • 在 .NET 8 Web API 中实现 Entity Framework 的 Code First 方法
  • 【算法系列-二叉树】对称翻转二叉树