当前位置: 首页 > news >正文

sqlx库使用指南

sqlx库使用指南
在项目中我们通常可能会使用database/sql连接MySQL数据库。本文借助使用sqlx实现批量插入数据的例子,介绍了sqlx中可能被你忽视了的sqlx.In和DB.NamedExec方法。
sqlx介绍
在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx可以认为是Go语言内置database/sql的超集,它在优秀的内置database/sql基础上提供了一组扩展。这些扩展中除了大家常用来查询的Get(dest interface{}, ...) error和Select(dest interface{}, ...) error外还有很多其他强大的功能。

代码:

创建你数据表

CREATE TABLE `user` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`name` VARCHAR(20) DEFAULT '',`age` INT(11) DEFAULT '0',PRIMARY KEY(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

代码的增删改查;

package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)type user struct {Id   intAge  intName string
}var db *sqlx.DBfunc initDB() (err error) {dsn := "root:root123456@tcp(127.0.0.1:3306)/sql_test?charset=utf8mb4&parseTime=True"// 也可以使用MustConnect连接不成功就panicdb, err = sqlx.Connect("mysql", dsn)if err != nil {fmt.Printf("connect DB failed, err:%v\n", err)return}db.SetMaxOpenConns(20)db.SetMaxIdleConns(10)return
}// 插入数据
func insertRowDemo() {sqlStr := "insert into user(name, age) values (?,?)"ret, err := db.Exec(sqlStr, "沙河小王子", 19)if err != nil {fmt.Printf("insert failed, err:%v\n", err)return}theID, err := ret.LastInsertId() // 新插入数据的idif err != nil {fmt.Printf("get lastinsert ID failed, err:%v\n", err)return}fmt.Printf("insert success, the id is %d.\n", theID)
}// 更新数据
func updateRowDemo() {sqlStr := "update user set age=? where id = ?"ret, err := db.Exec(sqlStr, 39, 6)if err != nil {fmt.Printf("update failed, err:%v\n", err)return}n, err := ret.RowsAffected() // 操作影响的行数if err != nil {fmt.Printf("get RowsAffected failed, err:%v\n", err)return}fmt.Printf("update success, affected rows:%d\n", n)
}// 删除数据
func deleteRowDemo() {sqlStr := "delete from user where id = ?"ret, err := db.Exec(sqlStr, 1)if err != nil {fmt.Printf("delete failed, err:%v\n", err)return}n, err := ret.RowsAffected() // 操作影响的行数if err != nil {fmt.Printf("get RowsAffected failed, err:%v\n", err)return}fmt.Printf("delete success, affected rows:%d\n", n)
}// 查询单条数据示例
func queryRowDemo() {sqlStr := "select id, name, age from user where id=?"var u usererr := db.Get(&u, sqlStr, 2)if err != nil {fmt.Printf("get failed, err:%v\n", err)return}fmt.Printf("id:%d name:%s age:%d\n", u.Id, u.Name, u.Age)
}// 查询多条数据示例
func queryMultiRowDemo() {sqlStr := "select id, name, age from user where id > ?"var users []usererr := db.Select(&users, sqlStr, 0)if err != nil {fmt.Printf("query failed, err:%v\n", err)return}fmt.Printf("users:%#v\n", users)
}
func main() {initDB()insertRowDemo()queryRowDemo()deleteRowDemo()fmt.Println("==============")queryRowDemo()fmt.Println("==============")queryMultiRowDemo()
}

http://www.lryc.cn/news/163197.html

相关文章:

  • 算法篇汇总
  • typeScript 学习笔记(二)
  • redis集群架构详解
  • nodejs设置镜像
  • CSS中如何在table中隐藏表格中从第4个开始的多个 <tr> 元素
  • 【类和对象】③友元类
  • 算法通关村第十六关:黄金挑战:滑动窗口与堆结合
  • 6.2.2 【MySQL】InnoDB中的索引方案
  • 划片机实现装片、对准、切割、清洗到卸片的自动化操作
  • OpenCV(二十五):边缘检测(一)
  • 上行取消指示 DCI format 2_4
  • 百望云蝉联2023「Cloud 100 China 」榜单 综合实力再获认可
  • 力扣刷题班第1节:Python语法常遗漏的知识
  • GET 和 POST请求的区别是什么
  • Python数据分析实战-表连接-merge四种连接方式用法(附源码和实现效果)
  • NFTScan 浏览器再升级:优质数据服务新体验来袭
  • C# 去除utf-8 BOM头
  • Java注解以及自定义注解
  • [开学季]ChatPaper全流程教程
  • Spring学习笔记——4
  • Python数据科学入门
  • Ubuntu 22.04 编译 DPDK 19.11 igb_uio 和 kni 报错解决办法
  • Android Studio.exe 下载 2023 最新更新,网盘下载
  • element的el-select给下拉框添加背景
  • 正确理解党籍和党龄;入党和转正时间
  • C语言基础:printf 函数介绍;以及常用四种常用的数据类型
  • 【LeetCode-中等题】209. 长度最小的子数组
  • 比较聚合模型实战文本匹配
  • LA@二次型@标准化相关原理和方法
  • Git与IDEA: 解决`dev`分支切换问题及其背后原因 为何在IDEA中无法切换到`dev`分支?全面解析!