0
点赞
收藏
分享

微信扫一扫

MySQL数据库5:Go与MySQL的交互

IT程序员 2022-03-17 阅读 59


下载第三方依赖

go get github.com/jmoiron/sqlx
go get github.com/go-sql-driver/mysql
  • ​​其中github.com/jmoiron/sqlx是我们需要用到的主要类库​​
  • ​​github.com/go-sql-driver/mysql是作为MySQL的驱动程序存在的,我们只需要执行包的init方法即可​​

引入依赖

import (
"github.com/jmoiron/sqlx"

//执行mysql包的init方法
_"github.com/go-sql-driver/mysql"

"fmt"
)

建立测试数据库表

create database mydb charset=utf8;

use mydb;

create table person(
id int primary key auto_increment,
name varchar(20) unique not null,
age int default 0,
dollar float default 1
);

alter table person add sex bool;
alter table person add schoolday date;
alter table person add birthtime datetime;

定义与数据表向匹配的结构体

/*
id | name | poem | age | dollar | sex | schoolday | birthtime
*/
type Person struct {
//所有属性必须公开——框架会转化查询结果为结构体对象
//标签名写法:`db:"表字段名"`
Name string `db:"name"`
Age int `db:"age"`
Dollar float32 `db:"dollar"`
}

执行增删改查操作

  • 增删改的方式是db.Exec(sql)
  • 查询的方式是:db.select(&model,sql)
func main() {
//连接数据库
db, _ := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/mydb")
defer db.Close()

//执行增删改,获得受影响的行数
result, _ := db.Exec("insert into person(name,age,sex,schoolday,birthtime) values(?,?,?,?,?);", "双黄蛋", 35, false, 20080813, 20180814164300)
rowsAffected, _:= result.RowsAffected()
lastInsertId, _ := result.LastInsertId()
fmt.Println("受影响的行数",rowsAffected,"最后一条记录的id",lastInsertId)

//执行增删改
db.Exec("insert into person(name,age,sex,schoolday,birthtime) values(?,?,?,?,?);", "双黄蛋", 35, false, 20080813, 20180814164300)
db.Exec("delete from person where id=?;", 2)
db.Exec("update person set name=? where name=?;", "张俩蛋","张全蛋")

//执行查询,获得person对象
//用于接收的数据类型是【结构体切片】,必须包含查询字段对应的公开属性,属性标签应写作:`db:"表字段名"`
var ps []Person

//第一个参数是【结构体切片】的地址
err := db.Select(&ps, "select name,age,dollar from person where name like ?;", "%蛋")
if err!=nil{
fmt.Println("err=",err)
}
fmt.Printf("%T,%v\n", ps, ps)

fmt.Println("执行成功!")
}


举报

相关推荐

0 条评论