博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GO从入门到进阶教程系列 - 研发高性能ORM框架操作mysql篇
阅读量:6334 次
发布时间:2019-06-22

本文共 2170 字,大约阅读时间需要 7 分钟。

     上一篇教程我们了解到了基础的GO语法,今天我们来学习如何使用GO操作mysq,下面就直接进入步骤操作环节

技术版权归属 ,如需商用请联系公司

1. 先获取mysql驱动,类似Java加载驱动jar, 通过window cmd命令或者Linux控制台执行

go get github.com/go-sql-driver/mysql
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2. 我们先写个数据库连接对象方便扩展

// 数据库配置type DBConfig struct {	Host      string // 地址IP	Port      int    // 数据库端口	Database  string // 数据库名称	Username  string // 账号	Password  string // 密码}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3. 通过数据库配置进行mysql实例化

func NewMysql() (*sql.DB, error) {	// 初始化mysql连接参数	conf := DBConfig{		Host:     "127.0.0.1",		Port:     3306,		Database: "test",		Username: "root",		Password: "123456",	}	// 定义占位符字符串,使用配置值替换%s和%d	link := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", conf.Username, conf.Password, conf.Host, conf.Port, conf.Database)	// 打开mysql获得实例对象	db, err := sql.Open("mysql", link)	// 打开mysql失败,返回nil对象,以及返回err对象	if err != nil {		panic(util.AddStr("mysql初始化失败: ", err.Error()))		return nil, errors.New("mysql初始化失败: " + err.Error())	}	// 打开mysql成功返回db对象,err=nil	return db, nil}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4. 获得mysql操作实例后,进行增删查改操作(由于时间关系,暂时只写了新增示例,包含事务和非事务)

func CRUD(db *sql.DB) error {	// 编写需要执行的sql	createSql := "insert test_user(username, password, age, sex) values(?,?,?,?)"	// 预编译sql	stmt, err := db.Prepare(createSql)	if err != nil {		panic("预编译失败: " + err.Error())	}	// 提交编译sql对应参数	ret, err := stmt.Exec("zhangsan", "123456", 18, 1)	if err != nil {		panic("提交数据失败: " + err.Error())	}	// 保存成功后获取自增ID	fmt.Println(ret.LastInsertId())	return nil}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
func CRUD1(db *sql.DB) error {	// 编写需要执行的sql	createSql := "insert test_user(username, password, age, sex) values(?,?,?,?)"	// 预编译sql,事务模式	tx, err := db.Begin()	if err != nil {		panic("开启事务失败: " + err.Error())	}	stmt, err := tx.Prepare(createSql)	if err != nil {		tx.Rollback() // 回滚事务		panic("预编译失败: " + err.Error())	}	// 提交编译sql对应参数	ret, err := stmt.Exec("zhangsan", "123456", 18, 1)	if err != nil {		tx.Rollback() // 回滚事务		panic("提交数据失败: " + err.Error())	}	// 保存成功后获取自增ID	fmt.Println(ret.LastInsertId())	tx.Commit() // 提交事务	return nil}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

5. 最后执行测试用例test

func TestMysql1(t *testing.T) {	db, err := NewMysql()	if err != nil {		panic(err)	}	CRUD(db)}func TestMysql2(t *testing.T) {	db, err := NewMysql()	if err != nil {		panic(err)	}	CRUD1(db)}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

上面的几个示例基本涵盖GO操作mysql的用法,下一篇文章我会讲解如何封装可扩展性强的mysql底层,敬请期待!

转载地址:http://tksoa.baihongyu.com/

你可能感兴趣的文章
python脚本的调试方法讲解
查看>>
dojo表格操作的简单示例(建立表格)
查看>>
java操作mysql中的编码问题解决
查看>>
Ado.NET SQLHelper(2)
查看>>
2014 腾讯软件测试开发二面,不用额外的变量来实现strlen
查看>>
253:Cube painting
查看>>
2016 年 Java 工具和技术的调查:IDEA 已超过
查看>>
Robot Framework学习笔记(十)------Selenium2Library库
查看>>
openssl 自建CA签发证书 网站https的ssl通信
查看>>
18、jmeter对数据库进行压力测试
查看>>
19、Linux命令对服务器内存进行监控
查看>>
springmvc中的字典表
查看>>
iterator的使用和封个问题
查看>>
mac 安装php mongo扩展,无法使用的解决办法
查看>>
hdu 4627 The Unsolvable Problem
查看>>
hdu 4268 Alice and Bob(STL贪心)
查看>>
MySql分库分表总结
查看>>
struts2文件上传,文件类型 allowedTypes
查看>>
看了这个才发现jQuery源代码不是那么晦涩【转载】
查看>>
phpstorm常用快捷键有哪些(图解归类)
查看>>