Go语言操作数据库

Go语言操作数据库

(一)database/mysql


(二)Beego ORM

《Beego ORM官方文档》


1.安装

  • go get github.com/astaxie/beego/orm
  • 如果你本来就需要使用Beego框架,那么直接go get github.com/astaxie/beego就可以了

2.初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import (
"fmt"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql" //导入MySQL驱动,并执行初始化函数
)

//结构体模型
type User struct {
Id int
Name string `orm:"size(100)"`
}

//初始化
func init() {
maxIdle := 30 //最大空闲连接
maxConn := 30 //最大连接数
//连接数据库
orm.RegisterDataBase("default", "mysql", "root:password@/kynodesme?charset=utf8", maxIdle, maxConn)

//注册模型
orm.RegisterModel(new(User))

//根据注册模型,创建表
orm.RunSyncdb("default", false, true)
}

(1)注册数据库驱动:RegisterDriver()

导入DB Driver时如果执行了init(),这一步就可以省略。

  • 参数1:driverName
  • 参数2:driverName对应的数据库类型,支持MySQL/PostgreSQL/Sqlite3
1
orm.RegisterDriver("mysql", orm.DBMySQL)

(2)连接数据库:RegisterDataBase()

  • 参数1:数据库别名,必须注册一个别名default的数据库,作为默认使用
  • 参数2:driverName
  • 参数3:user:passwd@/dbname?charset
  • 参数4:最大空闲连接数(可省略)
  • 参数5:最大连接数(可省略)
1
2
3
maxIdle := 30 //最大空闲连接
maxConn := 30 //最大连接数
orm.RegisterDataBase("default", "mysql", "root:password@/kynodesme?charset=utf8", maxIdle, maxConn)

(3)注册模型:RegisterModel()

  • 参数:结构体对象
1
2
3
4
5
6
//结构体模型
// type User struct{
// Id int
// Name string
// }
orm.RegisterModel(new(User))

(4)根据注册模型,创建表:RunSyncdb()

  • 参数1:数据库别名
  • 参数2:如果表已存在,是否删除后重建,一般建议false
  • 参数3:是否显示编译好的SQL语句
1
orm.RunSyncdb("default", false, true)

3.CRUD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
func main() {
o := orm.NewOrm()

user := User{Name: "slene"}

// insert,插入
id, err := o.Insert(&user)
fmt.Printf("ID: %d, ERR: %v\n", id, err)

// update,更新
user.Name = "astaxie"
num, err := o.Update(&user)
fmt.Printf("NUM: %d, ERR: %v\n", num, err)

// read one,查询
u := User{Id: user.Id}
err = o.Read(&u)
fmt.Printf("ERR: %v\n", err)

// delete,删除
num, err = o.Delete(&u)
fmt.Printf("NUM: %d, ERR: %v\n", num, err)
}

4.原生SQLRaw()

1
2
3
4
5
var maps []orm.Params //存储查询结果的map
num, err := o.Raw("SELECT * FROM user").Values(&maps)
for _,term := range maps{
fmt.Println(term["id"],":",term["name"])
}

5.事务

  • Begin():开启事务
  • Commit():提交事务
  • Rollback():回滚事务
1
2
3
4
5
6
7
8
9
o.Begin()
...
user := User{Name: "slene"}
id, err := o.Insert(&user)
if err == nil {
o.Commit()
} else {
o.Rollback()
}
-------------本文结束感谢您的阅读-------------
急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%