go语言操作MySql数据库(原生与ORM方式)

一.原生方式

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)
}

*注意:ORM只能操作表,不能操作数据库,所以我们连接的数据库要提前在MySQL终端创建好

orm.RunSyncdb(“default”,false,true)参数说明:
- 1.数据库别名
- 2.是否强制更新
- 3.创建表过程是否可见
第二个参数是是否强制更新,一般我们写的都是false,如果写true的话,每次项目编译一次数据库就会被清空一次,fasle的话会在数据库发生重大改变(比如添加字段)的时候更新数据库。

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)
	}

猜你喜欢

转载自blog.csdn.net/jin870132/article/details/96338775