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增删改查

最新文章

  1. OpenCV是什么?
  2. wp8 入门到精通 动画
  3. Ul li 横排 菜单
  4. JS学习笔记(三) 对象
  5. SGU 218.Unstable Systems
  6. Using Live555 to Stream Live Video from an IP camera connected to an H264 encoder
  7. Junit4 架构设计系列(1): Request,ClassRequest 和 RunnerBuilder
  8. java 字符串转int
  9. 在birt中解决引用了不存在的绑定出现的问题
  10. .net 设置版本号信息
  11. UE4 保存为bitmap
  12. 「JavaScript」JS四种跨域方式详解
  13. kernel笔记——进程调度
  14. leetcode — combination-sum-ii
  15. Jmter接口网站压力测试工具使用记录
  16. 使用XIB 或者storyboard 创建imageView 模式 UIViewContentModeScaleAspectFill  图片越界问题
  17. 基于form表单 写登陆注册
  18. Node.JS 项目打包 JXCore
  19. P2800 又上锁妖塔
  20. js 把字符串保存为txt文件,并下载到本地

热门文章

  1. Jmeter请求之cookie处理方式
  2. (在模仿中精进数据可视化03)OD数据的特殊可视化方式
  3. Docker-V 详解
  4. tamcat7.0(安装文件下载)
  5. IDEA配置类和方法注释模板
  6. 想买保时捷的运维李先生学Java性能之 生存与毁灭
  7. Win32之进程创建过程
  8. 群晖DS218+部署mysql
  9. ResultSet 处理方法
  10. 小白:String函数总结