zoukankan      html  css  js  c++  java
  • 基于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迭代方法。

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

  • 相关阅读:
    QPushButton设置背景图片,设置背景透明度
    QMessageBox 弹窗提示总结
    Qt中 QObject * sender() const的用法
    Java获取文件后缀
    Qt QLabel设置背景色
    Qt 设置程序图标
    程序猿 tensorflow 入门开发及人工智能实战
    Github + Hexo 搭建博客
    Linux常用命令
    深度学习路线记录
  • 原文地址:https://www.cnblogs.com/huaface/p/13968938.html
Copyright © 2011-2022 走看看