一.原生方式
golang其实官方不提供连接mysql实现,先下载第三方的实现
https://github.com/golang/go/wiki/SQLDrivers
该地址可以看到所以的驱动包.这里选择了Go-MySQL-Driver这个实现
使用如下命令即可
go get github.com/go-sql-driver/mysql
1.连接数据库
conn,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/king")
defer conn.Close()
2.新增数据
func doInsert(conn *sql.DB){
fmt.Println("开始插入数据")
res ,err:= conn.Exec("INSERT INTO user(userName, passWord) VALUES (?, ?)","测试1","123456")
utils.DoError("插入失败:",err)
fmt.Println(res)
}
ps:修改/删除语句都走conn.Exec(sql)方法实现
3.查询数据
func doQuerry(conn *sql.DB){
fmt.Println("开始查询数据")
data,err := conn.Query("SELECT userName from user")
utils.DoError("sql.Query",err)
if err == nil{
var userName string
for data.Next() {
data.Scan(&userName)
logs.Error(userName)
}
}
}
二.ORM方式
Beego中内嵌了ORM框架,用来操作数据库。它的灵感主要来自 Django ORM 和 SQLAlchemy。
也就是已bean的方式操作数据库,无需再写sql
1.初始化
1.1注册数据库表
用orm.RegisterModel()函数,参数是结构体对象,如果有多个表,可以用 , 隔开,多new几个对象:
orm.RegisterModel(new(User),new(Person))
1.2 生成表
orm.RunSyncdb("default",false,true)
参数一:数据库别名,和RegisterDataBase定义别名对应
参数二:是否强制更新,true的话会清除数据库新建
参数三:生成表过程是否可见(log显示sql)
1.3 示例
首先我们先定义一个bean,并将数据库连接初始化操作写在init方法中
package models
import "github.com/astaxie/beego/orm"
type User struct {
Id int
Name string
PassWord string
}
func init() {
//1.连接数据库
orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/king")
//2.注册表
orm.RegisterModel(new(User))
//3.生成表
orm.RunSyncdb("default",false,true)
}
2.增删改查操作
2.1插入数据
func doInsertOrm() {
fmt.Println("开始doQuerryOrm")
//1.定义一个orm对象
o := orm.NewOrm()
var user models.User
//定义要插入的bean
user.Name = "king"
user.PassWord = "668899"
id, err := o.Insert(&user)
utils.DoError("orm插入错误", err)
if err == nil {
fmt.Println("插入成功_id:", id)
}
}
2.2查询数据
func doQueryOrm() (user *models.User){
o := orm.NewOrm()
//查询操作
user.Name = "king"
err := o.Read(&user, "name")
utils.DoError("orm查询错误", err)
fmt.Println(user)
return
}
2.3更新操作
func doUpdateOrm(user *models.User) {
o := orm.NewOrm()
//更新操作 --需要先查询
user.PassWord = "xiugai"
count, err := o.Update(&user)
utils.DoError("orm更新错误", err)
fmt.Println("orm更新成功条目数量:", count)
}
2.4 删除操作
func doDeleteOrm(user *models.User) {
o := orm.NewOrm()
//更新操作 --需要先查询
count, err := o.Delete(&user)
utils.DoError("orm更新错误", err)
fmt.Println("orm更新成功条目数量:", count)
}