小试牛刀: Go操作Mysql

Go Web服务开发: 使用原生和ORM操作Mysql数据库(简单版)


1. 原生操作Mysql数据库(依赖mysql的驱动)

安装mysql驱动: go get github.com/go-sql-driver/mysql

  • 使用Go语言连接处理Mysql的步骤和其他语言是很类似的, 打开数据库 -> 操作数据库 -> 关闭数据库这么三步操作,这里就按照这三步来完成mysql的简单操作 (注意,这里使用的是在beego框架中做的操作,原生写也是一样的)
import (
	"database/sql"
	"github.com/astaxie/beego"
	_ "github.com/go-sql-driver/mysql"
)
type MysqlController struct {
	beego.Controller
}

/**
 * Go操作mysql创建User数据表
 */
 func (this *MysqlController) CreateUserTable(){
 	// 1. 打开数据库:
 	// 使用sql.Open()方法去打开一个数据库连接
 	// 参数1: 驱动名称,也就是我们要操作的数据库类型, 这里是mysql
 	// 参数2: 连接字符串,格式为: 用户名:密码@协议tcp(地址:端口号)/数据库名称?charset=utf8(执行编码)
 	// 返回值1: 连接对象, 返回值2:错误信息
 	conn, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/testdata?charset=utf8")
 	if err != nil {
 		beego.Info("连接数据库错误", err)
 		return
 	}
 	// 3. 使用defer在函数执行完毕后调用Close方法关闭数据库
 	defer conn.Close()
	
	// 2. 操作数据库:
	// 使用Exec()方法执行sql语句完成数据库的操作
	// 返回值是操作的结果和错误信息
	_, err = conn.Exec("create table User(id int, name varchar(20))")
	if err != nil {
		beego.Info("操作数据库失败:", err)
		return
	}
	this.Ctx.WriteString("Go操作Mysql创建User数据表成功")
 }
  • 以上便是原生Go使用mysql驱动操作mysql的最简单的实现了,除了上面使用到的Open(), Close(), Exec()三个方法外,还有一个比较常用的方法是查询数据的Query()
// 其他省略,只演示Query方法的使用
// Query()方法的参数是查询数据的sql语句
// 返回值是查询的结果和错误信息
rows, err := conn.Query("select id from User")
if err != nil {
	beego.Info("查询数据库失败, ", err)
	return
}
var id int
// 查询结果rows对象是可遍历的,依次取出查询的结果写入到id变量中
for rows.Next() {
	// Scan方法将当前的这一条数据扫描到一个指定的地址
	// 参数为一个变量的地址
	rows.Scan(&id)
	beego.Info("查询数据成功: ", id)
}

2. 使用ORM操作Mysql数据库

  • 这里我使用的是beego框架,里面内置了orm操作的包,直接引入使用即可
/**
 * ORM操作Mysql操作
 * 1. 创建结构体和数据库结构之间的映射
 * 2. 连接数据库:注册数据库
 * 3. 注册数据库表
 * 4. 生成数据表
 */

// 这里再models文件中进行上面步骤的初始化,避免之后的重复操作
// 创建数据表的映射结构体
type User struct {
	Id int    // Id为默认主键
	Name string
}
func init() {
	// 注册数据库:
	// 参数1: 数据库别名
	// 参数2: 数据库驱动名称,及就是连接数据库的类型
	// 参数3: 数据库连接的相关信息,和使用sql.Open()打开数据库的第二个参数一样
	orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/testdata?charset=utf8")
	// 注册数据表:
	// 参数: 需要注册的数据表的数据结构体, 当有多个表时使用逗号分隔
	orm.RegisterModel(new(models.User))
	// 生成数据表
	// 参数1: 需要操作的数据库别名,数据库别名需要有一个default
	// 参数2: 是否强制更新, 参数为boolean值, 一般设置为false
	// 参数3: 是否可以看到创建数据表的过程, 参数也为bool值
	orm.RunSyncdb("default", false, true)
}
  • 这里完成数据库的增删改查操作
  • 注意,这里的代码需要再上面的init()方法被执行初始化之后方才有效
// 使用ORM(对象关系映射)操作Mysql数据库
type OrmController struct {
	beego.Controller
}

// 插入数据操作
func (this *OrmController) InsertOrm(){
	// 1. 连接数据库,获取连接对象
	o := orm.NewOrm()
	// 2. 创建插入对象
	user := models.User{}
	user.Name = "chenSir"
	// 执行插入操作, 参数为被插入对象的地址
	// 返回值1: 插入影响的行数
	// 返回值2: 错误信息
	_, err := o.Insert(&user)
	if err != nil {
		beego.Info("插入数据失败了")
		this.Ctx.WriteString("插入数据失败!")
	}
	this.Ctx.WriteString("插入数据成功!")
}

// 查询数据操作
func (this *OrmController) SelectOrm(){
	// 获取连接对象
	o := orm.NewOrm()
	// 获取查询对象
	user := models.User{Id: 1}
	// 执行查询操作,
	// 参数为查询对象地址,查询到的结果会写入到这个对象中
	// 返回值是一个错误信息
	err := o.Read(&user)
	if err != nil {
		beego.Info("查询失败")
		return
	}
	data, err := json.Marshal(user)
	if err != nil {
		beego.Info("转化信息失败")
		return
	}
	this.Ctx.WriteString(string(data))
}

// 更新数据操作
func (this *OrmController) UpdateOrm(){
	// 1. 获取orm对象
	o := orm.NewOrm()
	// 2. 获取更新对象
	user := models.User{
		Id: 1,
	}
	// ** 3. 查询更新对象 **
	err := o.Read(&user)
	if err != nil {
		beego.Info("查询数据错误,无法完成更新.")
		return
	}
	// ** 4. 对查询到的更新对象赋值 **
	user.Name = "ChenSirLaiLe"
	// 5. 执行更新操作
	// 返回值第一个为此次更新影响的数据行数
	// 返回值第二个为更新操作的错误信息
	_, err = o.Update(&user)
	if err != nil {
		beego.Info("更新数据错误")
		return
	}
	this.Ctx.WriteString("更新数据成功")
}

// 删除数据操作
func (this *OrmController) DeleteOrm(){
	// 1. 获取orm对象
	o := orm.NewOrm()
	// 2. 获取删除对象
	user := models.User{Id: 1}
	// 3. 执行删除操作
	_, err := o.Delete(&user)
	if err != nil {
		beego.Info("执行删除操作失败")
		return
	}
	this.Ctx.WriteString("删除数据成功了")
}
  • 关于Go语言简单操作Mysql数据库就说这么多了,有任何问题欢迎大家留言讨论,我是Go萌新一枚,多多指正!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值