源码
package main
import (
"fmt"
"gitee.com/liumou_site/logger"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
"os"
)
type MysqlApi struct {
UserName string // 数据库登录用户名
Password string // 数据库登录密码
Host string // 数据库登录地址
Port int // 数据库端口
DbName string // 数据库名称
Charset string // 字符编码
Db *sqlx.DB // 数据库实例
}
type Person struct {
UserId int `db:"id"`
UserName string `db:"name"`
UserAge int `db:"age"`
}
func MysqlConfig() *MysqlApi {
Login := new(MysqlApi)
Login.Charset = "utf8" // 字符编码
Login.UserName = "root" // 登录用户
Login.Port = 3306 // 数据库端口
Login.Host = "127.0.0.1" // 数据库登录地址
Login.Password = "1" // 数据库登录密码
Login.DbName = "liumou" // 数据库名称
Arg := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", Login.UserName, Login.Password, Login.Host, Login.Port, Login.DbName, Login.Charset)
fmt.Println(Arg)
Db, err := sqlx.Open("mysql", Arg)
if err != nil {
logger.Error("数据库连接失败, 详细信息: ", err.Error())
os.Exit(1)
}
Login.Db = Db
return Login
}
// AddUser 在数据表中添加用户信息
func (sql *MysqlApi) AddUser() {
for i := 2; i < 5; i++ {
result, err := sql.Db.Exec("insert into demo values(?,?,?)", i, "刘德华", 18)
if err != nil {
logger.Error("数据插入失败,详细信息: ", err.Error())
return
}
id, _ := result.LastInsertId()
logger.Info("数据插入成功,ID: ", id)
}
}
// UpdateName 更新id值1的用户名
func (sql *MysqlApi) UpdateName() {
result, err := sql.Db.Exec("update demo set name = '刘亦菲' where id = 1")
if err != nil {
logger.Error("更新失败, 详细信息: ", err.Error())
return
}
num, _ := result.RowsAffected()
logger.Info("更新成功,影响的行数: ", num)
}
// DeleteUser 删除ID值2的用户
func (sql *MysqlApi) DeleteUser() {
result, err := sql.Db.Exec("delete from demo where id = 2")
if err != nil {
logger.Error("删除失败, 详细信息: ", err.Error())
return
}
num, _ := result.RowsAffected()
logger.Info("删除成功,影响的行数: ", num)
}
// SelectUser 查询用户信息
func (sql *MysqlApi) SelectUser() {
var person []Person
// 手动关闭连接,模拟程序自动断开连接
err := sql.Db.Close()
if err != nil {
return
}
// 判断当前连接是否正常,如果已断开则重新连接
if err := sql.Db.Ping(); err != nil {
logger.Error("连接已断开,正在重新连接")
sqlps := MysqlConfig()
sql.Db = sqlps.Db
}
err = sql.Db.Select(&person, "select * from liumou.demo;")
if err != nil {
//fmt.Printf("查询失败, 详细信息:[%v]", err.Error())
logger.Error("查询失败:", err)
} else {
logger.Info("查询成功,数据如下")
fmt.Println(person)
}
}
func main() {
mysql := MysqlConfig()
mysql.AddUser()
mysql.UpdateName()
mysql.DeleteUser()
mysql.SelectUser()
err := mysql.Db.Close()
if err != nil {
logger.Error("连接关闭失败")
return
} else {
logger.Info("连接关闭成功")
}
}
效果
PS D:\DATA\git\GoLang\Demos\go-mysql> go run .\mysql.go
root:1@tcp(127.0.0.1:3306)/liumou?charset=utf8
[2023-01-07 11:08:18] [INFO] [mysql.go:55] 数据插入成功,ID: 0
[2023-01-07 11:08:18] [INFO] [mysql.go:55] 数据插入成功,ID: 0
[2023-01-07 11:08:18] [INFO] [mysql.go:55] 数据插入成功,ID: 0
[2023-01-07 11:08:18] [INFO] [mysql.go:67] 更新成功,影响的行数: 0
[2023-01-07 11:08:18] [INFO] [mysql.go:78] 删除成功,影响的行数: 1
[2023-01-07 11:08:18] [EROR] [mysql.go:91] 连接已断开,正在重新连接
root:1@tcp(127.0.0.1:3306)/liumou?charset=utf8
[2023-01-07 11:08:18] [INFO] [mysql.go:100] 查询成功,数据如下
[{1 刘亦菲 1} {3 刘德华 18} {4 刘德华 18}]
[2023-01-07 11:08:18] [INFO] [mysql.go:115] 连接关闭成功
PS D:\DATA\git\GoLang\Demos\go-mysql>
附-数据表创建语句
CREATE TABLE `demo` (
`id` INT(11) NULL DEFAULT NULL,
`name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`work` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci'
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;