Go语言访问mysql数据库需要用到标准库database/sql和mysql的驱动。标准库的Api使用比较繁琐这里再引入另一个库github.com/jmoiron/sqlx

go get github.com/jmoiron/sqlx
go get github.com/go-sql-driver/mysql

连接数据库

db, err := sqlx.Connect("mysql", "...?parseTime=true")
if err != nil {
log.Panicln("db err: ", err.Error())
}

使用sqlx的Connect方法连接数据库,Connect自动确认是否连接成功,如果出错的话err返回错误信息。可以在需要连接数据库的函数中直接连接,也可以使用基于gin的golang web开发:访问mysql数据库中介绍的go语言init机制获取连接。

增删改

mysql的增删改使用db的Exec函数,传入sql语句和查询参数。sqlx也提供了MustExec函数,在sql语句执行出错的时候触发panic而不是返回error。

db, err := sqlx.Connect("mysql", "...?parseTime=true")
if err != nil {
log.Panicln("db err: ", err.Error())
}
defer db.Close() insertSql := `
INSERT INTO sys_user (
username,
PASSWORD
)
VALUES
(?, ?);
`
result, err := db.Db.Exec(insertSql, username, password)
if err != nil {
log.Panicln("add user err: ", err.Error())
} updateSql := `
update sys_user
set username = ?
where id = ?;
`
result1, err1 := db.Db.Exec(updateSql, username, id)
if err1 != nil {
log.Panicln("update user by id err: ", err.Error())
} deleteSql := `
delete from sys_user
where id = ?
`
result2, err2 := db.Db.Exec(deleteSql, id)
if err2 != nil {
log.Panicln("delete user by id err: ", err.Error())
}

Exec函数的结果result接口包含两个函数LastInsertId,RowsAffected,可以判断RowsAffected > 0来验证sql语句的执行结果。注意RowsAffected不是所有数据库和驱动都支持,如果你用的不是mysql的话需要检查你的环境是否支持RowsAffected。

sqlx支持可以方便把数据库查询结果转换成go结构体,Get和Select分别用来获取单个结果和多个结果。

type SysUser struct {
Id int `json:"id"`
Username null.String `json:"username"`
Password null.String `json:"password"` // 登录密码
} func GetAllUser(request GetAllUserRequest) (list []SysUser) {
strSql := `
select id,
username,
password
from sys_user
`
err = db.Db.Select(&list, strSql)
if err != nil {
log.Panicln("select sys_user err: ", err.Error())
} return
} func GetById(id int) (user SysUser) {
sysUser := SysUser{}
dataSql := `
select id,
username,
password
from sys_user
where id = ?
`
err := db.Db.Get(&sysUser, dataSql, id)
if err != nil {
log.Panicln("get user by id err: ", err.Error())
}
return sysUser
}

Select方法获取所有结果放入内存,并转换为目标结构体,如果结果中包含大量数据的话可以分页返回,也可以使用Query/StructScan迭代方法。

文章出处:基于gin的golang web开发:mysql增删改查

基于gin的golang web开发:mysql增删改查的更多相关文章

  1. 基于gin的golang web开发:访问mysql数据库

    web开发基本都离不开访问数据库,在Gin中使用mysql数据库需要依赖mysql的驱动.直接使用驱动提供的API就要写很多样板代码.你可以找到很多扩展包这里介绍的是jmoiron/sqlx.另外还有 ...

  2. 基于gin的golang web开发:路由

    Gin是一个用Golang编写的HTTP网络框架.它的特点是类似于Martini的API,性能更好.在golang web开发领域是一个非常热门的web框架. 启动一个Gin web服务器 使用下面的 ...

  3. 基于gin的golang web开发:路由二

    在基于gin的golang web开发:路由中我们介绍了Gin的路由和一些获取链接中参数的方法,本文继续介绍其他获取参数的方法. 文件上传 在web开发中文件上传是一个很常见的需求,下面我们来看一下基 ...

  4. 基于gin的golang web开发:模型绑定

    在前两篇文章介绍路由的时候,我们了解到gin可用通过类似DefaultQuery或DefaultPostForm等方法获取到前端提交过来的参数.参数不多的情况下也很好用,但是想想看,如果接口有很多个参 ...

  5. 基于gin的golang web开发:模型验证

    Gin除了模型绑定还提供了模型验证功能.你可以给字段指定特定的规则标签,如果一个字段用binding:"required"标签修饰,在绑定时该字段的值为空,那么将返回一个错误.开发 ...

  6. 基于gin的golang web开发:使用数据库事务

    在前文介绍访问数据库时介绍了github.com/jmoiron/sqlx包,本文基于这个包使用数据库事务. defer 在使用数据库事务之前,首先需要了解go语言的defer关键字.defer是go ...

  7. 基于gin的golang web开发:中间件

    gin中间件(middleware)提供了类似于面向切面编程或路由拦截器的功能,可以在请求前和请求之后添加一些自定义逻辑.实际开发中有很多场景会用到中间件,例如:权限验证,缓存,错误处理,日志,事务等 ...

  8. 基于gin的golang web开发:集成swagger

    在前后端分离的项目维护一份完整且及时更新的api文档会极大的提高我们的工作效率,传统项目中接口文档都是由后端开发手写的,这种文档很难保证及时性,久而久之便失去了参考意义.swagger给我们提供了一种 ...

  9. 基于gin的golang web开发:永远不要相信用户的输入

    作为后端开发者我们要记住一句话:"永远不要相信用户的输入",这里所说的用户可能是人,也可能是另一个应用程序."永远不要相信用户的输入"是安全编码的准则,也就是说 ...

随机推荐

  1. xxe 新手学习记录

    在做某题时遇到了xxe漏洞,学习+记录 这里因为环境暂时关了,现在复现不了,所以在网络上又找到了一些xxe题目环境 这里有 PikaChu靶场里的xxe环境,这个环境可以在BUUCTF里开,但是这里我 ...

  2. kubernetes-介绍与特性

    1. kubernetes概述 1) kubernetes是什么 2) kubernetes能做什么 3) kubernetes特性 4) kubernetes集群架构与组件 5) kubernete ...

  3. RxJS入门2之Rxjs的安装

    RxJS V6.0+ 安装 RxJS 的 import 路径有以下 5 种: 1.创建 Observable 的方法.types.schedulers 和一些工具方法 import { Observa ...

  4. 《python 网络数据采集》代码更新

    <python 网络数据采集>这本书中会出现很多这一段代码: 1 from urllib.request import urlopen 2 from bs4 import Beautifu ...

  5. Mysql数据库分布式事务XA详解

    XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段).如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段 ...

  6. php 数组与URL相互转换

    php为了数组与url参数相互转换提供了两个函数: 1,数组转换为带&的URL的字符串 例如: $arr =['title'=>'我是小白','name'=>'真的很白','tex ...

  7. linux(centos8):prometheus使用mtail监控错误日志

    一,mtail的用途? mtail :从应用程序日志中提取指标以导出到时间序列数据库或时间序列计算器 它是一个google开发的日志提取工具,用途就是: 实时读取应用程序的日志. 再通过自己编写的脚本 ...

  8. HTML DOM Document的实际应用

    HTML文档中可以使用以下属性和方法: 属性 / 方法 描述 document.activeElement 返回当前获取焦点元素 document.addEventListener() 向文档添加句柄 ...

  9. Linux中创建自己的欢迎登陆界面

    /etc 在Linux中相当于Windows的注册表 修改其中文件可以影响整个Linux系统 MOTD motd:message of the day /etc/motd /etc/motd文件作用是 ...

  10. 使用Navicat远程连接阿里云ECS服务器上的MySQL数据库

    一.必须给服务器的安全组规则设置端口放行规则,在管理控制台中设置: 之后填写配置,授权对象是授权的IP,其中0.0.0.0/0为所有IP授权,之后保存; 二.Navicat使用的配置 在编辑连接处,要 ...