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("连接关闭成功") } }