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操作数据库 的相关文章

  • 记录 http.ResponseWriter 内容

    Premise 我发现了类似的问题 但不适用于我的情况 因此请不要将其标记为重复 我在 Go 中有一个 HTTP 服务器 并且创建了一个中间件记录请求 响应时间 我也想记录响应 我用过httputil DumpRequest在一个名为的函数
  • 命名和未命名类型

    问题 我最近开始阅读Golang规格手册 https golang org ref spec并陷入试图理解的困境有名和无名类型在相关部分 https golang org ref spec Types 我来自动态语言 这让我有点头疼 手册指
  • 如何获取文件的 ctime、atime、mtime 并更改它们

    如何使用 Go 获取文件的 ctime mtime atime 并更改它们 在 Go 1 1 2 中 os Stat只能获取mtime os Chtimes 可以更改 mtime 和 atime 但不能更改 ctime Linux ctim
  • Go 编程 - 使用指针绕过访问权限

    假设我的项目有以下层次结构 fragment fragment go main go 并且在fragment go我有以下代码 只有一个 getter 没有 setter package fragment type Fragment str
  • 将 []string 传递给需要可变参数的函数

    为了不一遍又一遍地重复我的自我 我想创建一个处理运行一些命令的函数 func runCommand name string arg string error cmd exec Command name arg if err cmd Run
  • 数据库连接最佳实践

    我有一个使用 net http 的应用程序 我使用 http 注册了一些处理程序 这些处理程序需要从数据库中获取一些内容 然后才能继续编写响应并完成请求 我的问题是连接到该数据库的最佳实践是什么 我希望它能够以每分钟 1 个请求或每秒 10
  • Bazel 构建缺少严格的依赖关系

    我正在尝试使用 brazel 构建 Go 应用程序 它是一个现有的私有 GitHub 存储库 位置如下 github xyz com repo name 我正在研究 我的目标是从 main go 文件创建一个二进制文件 该文件的方法依赖于其
  • GO并发编程测试

    我试图确保我的并发程序不存在以下情况 僵局 livelock 饥饿 我找到了以下工具http blog golang org race detector http blog golang org race detector 我尝试编译并运行
  • 共享来自单独命令/进程的属性

    我提供带有多个命令和子命令的命令行工具 我使用cobra https github com spf13 cobra命令行 我有两个单独的命令首先是前提条件e 给其他人 例如第一个命令是通过创建临时文件夹并验证某些文件来首选环境 第二个命令应
  • Go 中的 WebP 编码器/解码器

    是否有一个完整的 WebP 编码器和解码器与当前每周 或可分叉 兼容 它的速度与标准 png 相当吗 这个人在 GitHub 上有一个包 其中包含 WebP 的编码器和解码器 https github com chai2010 webp h
  • 是否支持动态变量?

    我想知道Go中是否可以动态创建变量 我在下面提供了一个伪代码来说明我的意思 我将新创建的变量存储在切片中 func method slice make type for i 0 i lt 10 i var variable i i slic
  • 我们如何在 Golang 中组合多个错误字符串?

    我是 golang 新手 我的应用程序需要在循环中返回多个错误 稍后需要组合并作为单个错误字符串返回 我无法使用字符串函数来组合错误消息 在返回之前可以使用什么方法将这些错误合并为一个错误 package main import fmt s
  • 投射回更专业的界面

    我正在用 Go 编写一个游戏 在 C 中 我将所有实体类存储在 BaseEntity 类的数组中 如果一个实体需要在世界中移动 那么它将是一个从 BaseEntity 派生的 PhysEntity 但添加了方法 我尝试模仿这是 go pac
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • Go 无法推断赋值中的类型:“non-name on left side of :=”

    该片段按预期工作play golang org p VuCl OKMav http play golang org p VuCl OKMav i 10 next 11 prev i i next 然而这个几乎相同的片段给出了non name
  • 错误“binary.Write:无效类型”是什么意思?

    下面显示的代码 我创建了一个结构类型并希望将其编码为二进制 但它显示binary Write invalid type main Stu错误 我读过一些类似的代码 但我找不到为什么我的代码不起作用 type Stu struct Name
  • 重新插入通道导致死锁

    我有稳定的入站 作业 流 将其输入到无缓冲通道中 我有一个for range循环来迭代项目并处理它们 如果处理该项目失败 我会将项目重新插入通道中 以便稍后重试 问题是当我将项目重新插入通道时 它陷入僵局 我明白为什么会发生这种情况 处理器
  • (转)如何使用toml文件?

    正如标题 我想知道如何使用 golang 中的 toml 文件 在此之前 我展示了我的 toml 示例 这样对吗 datatitle enable true userids 12345 67890 datatitle 12345 prop1
  • 编写每个处理程序中间件

    我希望从处理程序中提取一些重复的逻辑 并将其放入一些每个处理程序的中间件中 特别是 CSRF 检查 检查现有会话值 即身份验证或预览页面 等 我读了关于此的几篇文章 http justinas org writing http middle
  • 我应该避免在 golang 中使用单例包吗?

    现在我有一个包裹store包含以下内容 package store var db Database func Open url string error open db connection func FindAll model inter

随机推荐

  • 【华为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