golang mysql web开发_基于gin的golang web开发:mysql增删改查

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迭代方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值