# 数据库

# 概述

数据库也是后端中很重要的部分,下面介绍使用 Go 语言操作数据库的。

Xorm 是操作 MySQL 的一个库。

# 安装 Xorm

go get github.com/go-xorm/xorm
go get github.com/go-sql-driver/mysql

# Xrom 的初始化

包安装之后,我们进行初始化,init 函数是 Go 语言自带的函数,在 main 函数之前调用,我们通常初始化数据库在 init 函数中。

var DbEngin *xorm.Engine
func init(){
    drivenName := "mysql"
    // 格式:用户名:密码@(ip:port)/数据库/编码格式
    DsName := "root:123456@(127.0.0.0:3306)/chat?charset=utf8"
    var err errors
    DbEngin,err = xorm.NewEngine(drivenName,DsName)
    if err != err{
        log.Fatal(err.Error())
    }
    // 显示 SQL 语句
    DbEngin.ShowSQL(true)
    // 数据库链接最大的连接
    DbEngin.SetMaxOpenConns(2)
    // 自动创建 user 表
    DbEngin.Sync2(new(User))
    fmt.Println("init Data Base OK!")
}

上述实例中我们连接了 MySQL,需要特别注意 DsName 的拼接。

# 用 Xorm 增删改查

操作数据之前我们定义一个用户模型,在 mian.go 中添加用户模型。

type User struct {
    User_id    int64   `xorm:"pk autoincr"` // 自增主键
    Name       string  `xorm:"unique"`      // 用户名
}

(1)增加数据

下面的例子是增加一条用户名为鹅鹅的用户。

func Insert(name string) (int64, bool) {
    user := new(User)
    user.Name = name
    affected, err := DbEngin.Insert(user)
    if err != nil {
        return affected, false
    }
    return affected, true
}
func main() {
    res, err := Insert("鹅鹅")
    if err != nil {
        fmt.Println(err.Error())
    }
}

(2)删除数据

下面这例子是删除 ID 为 1 的用户。

func Del(id int64) {
    user := new(User)
    DbEngin.Id(id).Delete(user)
}

func main() {
    Del(1)
}

(3)更新

func update(id int64, user *User) bool {
    affected, err := DbEngin.ID(id).Update(user)
    if err != nil {
        log.Fatal("错误:", err)
    }
    if affected == 0 {
        return false
    }
    return true
}

func main() {
    user := new(User)
    user.Name = "鹅鹅鹅"
    isOk := update(1, user)
    fmt.Println(isOk) // true
}

(4)查询

func getinfo(id int64) *User {
    user := &User{User_id: id}
    is, _ := DbEngin.Get(user)
    if !is {
        log.Fatal("用户不存在!")
    }
    return user
}

func main() {
    user := getinfo(1)
    fmt.Println(user) // {1 鹅鹅鹅}
}
更新时间: 3/2/2022, 10:24:01 AM