gorm操作数据库

2023-11-15

gorm官方学习链接

操作总结

func (deploy *DeploymentConf) Get(application, server, instance string) error {
	err := DB.Table(DEPLOYTABLENAME).Where(map[string]interface{}{"application": application, "server_name": server, "deployment_name": instance}).Find(deploy).Error
	return err
}
  • DB.Table(tableName).where().find()/first()单条数据,若数据不存在会报错
    DB.Table(tableName).where().find([]slice)/first([]slice)多条数据,若数据不存在不报错。
  • Where条件中匹配多个查询条件用map时,必须声明为map[string]interface{}的形式。

ID int gorm:"column:id;primary_key;AUTO_INCREMENT" json:"id"

  • 主键声明为自增时,不要在tag中加type类型说明
type UnmarshalOfServerDel struct { //json请求解析结构体
	Application string `json:"application" valid:"matches(^[a-zA-Z][a-zA-Z0-9]+),length(1|64)"`
	ServerName  string `json:"server_name" valid:"matches(^[a-zA-Z][a-zA-Z0-9]+),length(1|64)"`
}

// HandleFunc ...
func (s *ServerDeleteStruct) HandleFunc(req string) (rsp interface{}, ret int, err error) {
	var input UnmarshalOfServerDel
	SLOG.Debugf("req: %v", req)
	err = json.Unmarshal([]byte(req), &input)
	if err != nil {
		SLOG.Warnf("Json unmarshal req fail: %v", req)
		return nil, -1, err
	}
	_, err = govalidator.ValidateStruct(&input)
	if err != nil {
		SLOG.Warnf("govalidator error: %v", err)
		return nil, -1, err
	}
}
  • Json.Marshal/json.Unmarshal()中用到的结构体的字段必须是大写可导出,否则会忽略结构体中小写字段的导出和匹配。若结构体当中有匿名结构体成员其Json.Marshal/json.Unmarshal()的效果和直接把嵌套结构体的数据成员写到外层结构体是一样的。
  • Marshal(nil)的结果为乱码。
  • Tx=db.begin()开启事务后,DB变量用tx代替。
  • Govalidate中的字段和前面的字段保持一个空格的间距

mvc操作数据库

1.原有MVC: 后台模块操作数据库的 MVC 方法 ,model层直接操作数据库之前加一层control控制层与web前端交互。经常会在web项目中用到MVC模式的写法:

  • M: 数据访问层,负责直接调用数据库 (最好有层次,分开控制逻辑和直接操作数据库的逻辑)
  • C: 控制层Controller,负责对请求的url分发到不同的url(处理请求的入口)。
  • V: 只负责从数据库获取数据,并显示。(web项目中用到)

2.新MVC:表示层调用控制层,控制层调用业务层,业务层调用数据操作层。

  • DAO层:数据操作层,DAO属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议只做原子操作,增删改查。

  • service层:业务层,Service层是建立在DAO层之上的服务层,粗略的理解就是对一个或多个DAOj接口进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事务控制。具体要调用已经定义的多个dao层接口,封装service层业务逻辑有利于通用的业务逻辑的独立性和重复利用性。程序显得非常简洁。

  • control层:控制层处理业务流程的逻辑,负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。负责具体的业务模块流程的控制,在此层要调用service层的接口来控制业务流程。针对具体的业务流程,会有不同的控制器。

  • view层:显示层。(web项目中用到)

  • 区别:Controller,从字面上理解是控制器,所以它是负责业务调度的,所以在这一层应写一些业务的调度代码,而具体的业务处理应放在service中去写,而且service不单纯是对于dao的增删改查的调用,service是业务层,所以应该更切近于具体业务功能要求,所以在这一层,一个方法所体现的是一个可以对外提供的功能,比如购物商城中的生成订单方法,这里面就不简单是增加个订单记录那么简单,我们需要查询库存,核对商品等一系列实际业务逻辑的处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gorm操作数据库 的相关文章

  • 如何在 Go 中将环境变量传递给测试用例

    在为 Go 编写测试用例时 传递需要提供给测试的环境变量的标准方法是什么 例如 我们不想在测试用例的源代码中嵌入密码 处理这个问题最标准的方法是什么 我们让测试用例寻找配置文件吗 还有别的事吗 看来我偶然发现了答案 将其添加到测试用例中可以
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • go中有memset的类似物吗?

    在 C 中 我可以使用某些值初始化数组memset https msdn microsoft com en us library aa246471 28v vs 60 29 aspx const int MAX 1000000 int is
  • 如何在golang中解析JSON而不需要解组两次

    我有一个 Web 套接字连接 它在 JSON 对象中发送不同类型的消息 并且我想将内容解组到一些已知的结构中 为此 我认为我应该执行以下操作 步骤 1 将 JSON 解组为通用映射 字符串 接口 步骤 2 找到我要找的钥匙 步骤 3 尝试将
  • Golang:带有 JSON 负载的 http.NewRequest POST 返回错误 500

    我正在开发一个 API 库 有一个API端点 POST 当您发出curl命令时 它是 curl H X API TOKEN API TOKEN http interest graph getprismatic com text topic
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 如何同时使用 LoadHTMLGlob 和 LoadHTMLFiles

    我想要来自不同子目录的分隔符逻辑模板templates文件夹 下面是我的templates文件夹 templates authentication login gohtml logout gohtml index gohtml profil
  • 如何确定 go 中当前运行的可执行文件的完整路径?

    我一直在 osx 上使用这个函数 Shortcut to get the path to the current executable func ExecPath string var here os Args 0 if strings H
  • 如何为所有 API 端点全局设置 http.ResponseWriter Content-Type 标头?

    我是 Go 新手 现在正在用它构建一个简单的 API package main import encoding json fmt github com gorilla mux github com gorilla handlers log
  • golang.org 包和标准库之间的区别

    我使用 go 已经有一段时间了 我注意到 Go 标准库 和 golang org x 之间存在重复的包 我的问题是 为什么它们被释放两次 在这两者中 我应该使用哪一个 更新的 规范的等 到目前为止我注意到的一些示例包已发布两次 golang
  • Golang 结构体初始化

    有一个像这样的简单结构 type Event struct Id int Name string 这两种初始化方法有什么区别呢 e1 Event Id 1 Name event 1 e2 Event Id 2 Name event 2 为什
  • Facebook服务器端登录、CORS

    我正在实现一个带有 FB 服务器端登录的网站 简化步骤如下 一个简单的按钮触发 JS 脚本 该脚本调用我的后端 APIhttps localhost fblogin function sendFbLoginData get https lo
  • container_memory_working_set_bytes 与 process_resident_memory_bytes 和total_rss 之间的关系

    我希望了解以下关系 容器内存工作集字节 vs 进程驻留内存字节 vs 总计RSS 容器内存 rss 文件映射以便更好地配备OOM可能性警报系统 这似乎违背了我的理解 这让我现在感到困惑 如果容器 pod 运行单个进程 执行用 Go 编写的编
  • pprof 和 ps 之间的内存使用差异

    我一直在尝试分析用 cobra 构建的 cli 工具的堆使用情况 这pprof工具显示如下 Flat Flat Sum Cum Cum Name Inlined 1 58GB 49 98 49 98 1 58GB 49 98 os Read
  • 将中间件与 Golang Gorilla mux 子路由器结合使用

    如何将中间件应用到 Go 中大猩猩工具包 http www gorillatoolkit org 多路复用器子路由器 我有以下代码 router mux NewRouter StrictSlash true apiRouter router
  • “http:多个response.WriteHeader调用”有什么不好的影响?

    尽管我发现 http 多个响应 WriteHeader 调用 例外 但我的服务器表现良好 此异常不会导致我的服务器出现恐慌或行为异常 我进行了很多搜索 但只找到了如何解决这个问题 没有文档描述异常的不良影响 有人可以帮我找出为什么 http
  • Golang const unsafe.Sizeof

    不明白为什么我可以做到 const OK uint64 0 const OK int unsafe Sizeof uint64 0 但不是这个 const NOK binary Size uint64 0 它的解释在规格 https gol
  • 如何通过在切片上查找来从切片复制到数组

    我正在编写一个库来处理二进制格式 我有一个带有数组变量的结构 我想保留它以用于文档目的 我还需要从输入字节片中查找和判断 一些伪代码 type foo struct boo 5 byte coo 3 byte func main input
  • 如何在golang中获得两个切片的交集?

    Go 中有没有有效的方法来获取两个切片的交集 我想避免嵌套 for 循环之类的解决方案slice1 string foo bar hello slice2 string foo bar intersection slice1 slice2
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr

随机推荐

  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • STM8单片机串口驱动的深度解析

    串口是单片机最重要的外设之一 在很多项目开发中都有应用 Lora模块的外部通讯方式就是串口 本节简单的和大家解析一下串口通讯及驱动代码的编程 STM8L101F3单片机支持一路串口通讯 我们先看一下Lora模块的硬件接口 如下图所示 串口的
  • go环境安装与idea goPATH设置

    1 找到中文go网站安装go环境 http docscn studygolang com doc tutorial getting started
  • Qt应用程序允许使用高地址内存的设置

    1 Qt4版本 在 pro文件中添加以下代码 申请使用高位地址内存 QMAKE LFLAGS Wl large address aware 2 Qt5版本 在 pro文件中添加以下代码 允许使用高位内存 QMAKE LFLAGS WINDO
  • Cocos Creator搞心态小游戏-闯关类 项目展示+完整项目源码

    游戏录像 Cocos Creator搞心态小游戏 闯关类 项目展示 游戏玩法 玩家通过按方向键控制角色移动 跳跃并躲避场景中的陷阱 角色触碰到陷阱会往后摔 直到角色到达摔到安全位置 功能 角色的基本移动前后移动 跳跃 角色触碰陷阱会往后摔
  • centos 7设置redis开机自启

    Linux设置redis开机自启 查询redis conf配置文件的路径 find name redis conf 设置redis conf中daemonize为yes 确保守护进程开启 当Redis以守护进程方式运行时 Redis默认会把
  • SpringBoot 整合 XXL-JOB(执行器)

    合集地址 pom 引入相关依赖 版本要和注册中心对应
  • Matlab - Solidworks 机器人建模(3)如何把URDF文件导入到Matlab

    文章目录 0 前言 1 URDF 转化成 rigidbody tree格式 2 URDF 导入到 simulink 有了urdf文件之后 在matlab里面可以有这两种导入选择 urdf 转化成 rigidbody tree urdf 转化
  • 基础算法【算法习题及模板】上

    目录 排序 快速排序 归并排序 二分 高精度 高精度加法 高精度减法 高精度乘法 高精度除法 排序 快速排序 给定你一个长度为n的整数数列 请你使用快速排序对这个数列按照从小到大进行排序 并将排好序的数列按顺序输出 输入格式 输入共两行 第
  • Linux 查看或统计网卡流量的几种方式【全】

    在工作中 我们经常需要查看服务器的实时网卡流量 通常 我们会通过这几种方式查看Linux服务器的实时网卡流量 目录 1 sar 2 proc net dev 3 ifstat 4 iftop 5 nload 6 iptraf ng 7 ne
  • 我国网民上网最爱干三件事:娱乐聊天看新闻

    中国互联网信息中心 CNNIC 今日发布第24次中国互联网发展状况统计报告 报告显示 我国网民上网最干的三件事分别是 娱乐 聊天 看新闻 报告称 我网民在网络娱乐 信息获取和交流沟通类网络应用上使用率较高 除论坛 BBS外 这三类网络应用在
  • 27条好赚钱副业的途径:自己也能不用上班月入2万+!

    前言 最近我的知乎号也是越做越好了 很多读者私聊我有没有副业可以做 自己平常除本职的工作之外 也会去做一些其他事情 写公众号 搞搞小视频 偶尔还接点小私活 平常还收了几个小徒弟 然而知乎上很多非相关互联网的也给我咨询了好的 不得不说自己还需
  • 基于孪生网络的单目标跟踪持续汇总

    基于Siamese Network的单目标跟踪持续汇总 Visual Object Tracking 从SiamFC开始 涌现了一大批基于孪生神经网络 Siamese Network 的跟踪算法 其中包括多目标跟踪和单目标跟踪 本文将以Si
  • 51单片机用三种方法实现流水灯(超详细)

    51单片机用三种方法实现流水灯 一 数组流水灯 二 移位函数流水灯 三 移位运算符流水灯 一 数组流水灯 定义一组数组分别对应点亮LED1 7 然后利用for循环赋值给p2从而实现流水灯 include
  • 微信用户的 openid 可能会在以下几种情况下发生变化

    微信用户的 openid 可能会在以下几种情况下发生变化 1 用户重新安装微信应用后 会获得一个新的 openid 2 用户在同一设备上切换微信账号后 该设备上存储的 openid 会刷新 3 微信用户设置了 清除缓存 后 也会获得新的 o
  • 项目2-年收入判断

    文章目录 项目2 年收入判断 友情提示 项目描述 数据集介绍 项目要求 数据准备 环境配置 安装 Logistic回归 数据准备 一些有用的函数 梯度与损失 模型训练 绘制损失和精度曲线 预测测试标签 多变量生成模型 数据准备 平均值和协方
  • 概率图模型(PGM):贝叶斯网(Bayesian network)初探

    1 从贝叶斯方法 思想 说起 我对世界的看法随世界变化而随时变化 用一句话概括贝叶斯方法创始人Thomas Bayes的观点就是 任何时候 我对世界总有一个主观的先验判断 但是这个判断会随着世界的真实变化而随机修正 我对世界永远保持开放的态
  • 三层交换机配置OSPF动态路由

    一 建立拓扑图 二 配置主机IP地址 网关 主机号 IP地址 网关 PC 0 192 168 10 101 192 168 10 1 PC 1 192 168 20 101 192 168 20 1 PC 2 192 168 30 101
  • 在IDEA中建好了一个Maven项目后,启动Tomcat,IDEA控制台输出乱码问题的改善

    前言 当我们在IDEA中新建一个Maven项目后 启动Tcomcat访问指定网页时 在IDEA控制台的output窗口会出现中文乱码的情况 对一些人来说 这样看起来很不舒服 为什么会出现这个问题呢 怎样解决这个问题呢 原因 Tomcat的配
  • gorm操作数据库

    gorm官方学习链接 操作总结 func deploy DeploymentConf Get application server instance string error err DB Table DEPLOYTABLENAME Whe