GolangはMySQLデータベースCRUDに接続します

今回はGolangを使用してMySQLデータベースに接続する方法を学び、Golangを使用してデータベースのCRUD操作を実装します。

ビルド環境

最初にGolangプロジェクトを作成し、プロジェクトGOPATHを構成します。このステップでは、私のブログGolang環境のインストールとIDEA開発Golangを参照できます

MySQLデータベースを使用しているため、GolangのMySQLデータベースドライバーを取得する必要があります。
プロジェクトのGOPATHディレクトリでgo getコマンドを実行してMySQLドライバーを取得し、コマンドが正常に実行されると、MySQLドライバーパッケージがインターネットから直接GOPATHディレクトリの下ディレクトリにダウンロードされますsrc

go get -u github.com/go-sql-driver/mysql

Golangプロジェクト環境を構築したら、データベーステーブルも作成する必要があります。

CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(11) DEFAULT NULL,
  `password` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `nameindex` (`name`(10))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

プロジェクトの構造

ここに画像の説明を挿入

書き込み構造

データベースから取得したデータを簡単にカプセル化できるようにするために、データをカプセル化するGolang構造を作成します。パッケージ
を作成してから、beanパッケージの下にuser.goファイルを作成します。

user.go

package bean

type User struct {
	id int
	name string
	password string
}

func (user *User) GetId() int {
	return user.id
}

func (user *User) SetId(id int) {
	user.id = id
}

func (user *User) GetName() string {
	return user.name
}

func (user *User) SetName(name string) {
	user.name = name
}

func (user *User) GetPassword() string {
	return user.password
}

func (user *User) SetPassword(password string) {
	user.password = password
}

データベース接続ツールを作成する

データベースに接続するたびにデータベース接続を取得する必要があるため、データベース接続操作をメソッドとして直接カプセル化するため、毎回接続を取得する手順を実行する必要がありません。パッケージ
を作成し、utilパッケージの下にinitdb.goファイルを作成します。

initdb.go

package util

import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
	"strings"
)

//我们先将数据库配置信息定义成为常量
const (
	userName = "root"
	password = "admin"
	ip       = "127.0.0.1"
	port     = "3306"
	dbName   = "db_database08"
)

//初始化数据库连接,返回数据库连接的指针引用
func InitDB() *sql.DB {
	//Golang数据连接:"用户名:密码@tcp(IP:端口号)/数据库名?charset=utf8"
	path := strings.Join([]string{userName, ":", password, "@tcp(", ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
	//打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
	db, err := sql.Open("mysql", path)
	if err != nil {
		//如果打开数据库错误,直接panic
		panic(err)
	}
	//设置数据库最大连接数
	db.SetConnMaxLifetime(10)
	//设置上数据库最大闲置连接数
	db.SetMaxIdleConns(5)
	//验证连接
	if err := db.Ping(); err != nil {
		panic(err)
	}
	//将数据库连接的指针引用返回
	return db
}

CRUD操作

挿入操作

insertパッケージを作成し、パッケージの下にinsert.goファイルを作成します

package main

import (
	"fmt"
	"mysql/util"
)

func main() {
	//使用工具获取数据库连接
	db := util.InitDB()
	//开启事务
	tx, err := db.Begin()
	if err != nil {
		//事务开启失败,直接panic
		panic(err)
	}
	//准备SQL语句
	sql := "insert into tb_user (`name`, `password`) values (?, ?)"
	//对SQL语句进行预处理
	stmt, err := db.Prepare(sql)
	if err != nil {
		panic(err)
	}
	result, err := stmt.Exec("阿部多瑞","123")
	if err != nil {
		//SQL执行失败,直接panic
		panic(err)
	}
	//提交事务
	tx.Commit()
	//返回插入记录的id
	fmt.Println(result.LastInsertId())
}

操作を選択

selectパッケージを作成し、パッケージの下にselect.goファイルを作成します

package main

import (
	"fmt"
	"mysql/bean"
	"mysql/util"
)

func main() {
	//使用工具获取数据库连接
	db := util.InitDB()
	//准备SQL语句
	sql := "select * from tb_user"
	//对SQL语句进行预处理
	stmt, err := db.Prepare(sql)
	if err != nil {
		panic(err)
	}
	rows, err := stmt.Query()
	if err != nil {
		//SQL执行失败,直接panic
		panic(err)
	}
	var users []bean.User
	for rows.Next() {
		var id int
		var name, password string
		err := rows.Scan(&id, &name, &password)
		if err != nil {
			//读取结果集失败
			panic(err)
		}
		var user bean.User
		user.SetId(id)
		user.SetName(name)
		user.SetPassword(password)
		users = append(users, user)
	}
	fmt.Println(users)
}

更新操作

updateパッケージを作成し、パッケージの下にupdate.goファイルを作成します

package main

import (
	"mysql/util"
)

func main() {
	//使用工具获取数据库连接
	db := util.InitDB()
	//开启事务
	tx, err := db.Begin()
	if err != nil {
		//事务开启失败,直接panic
		panic(err)
	}
	//准备SQL语句
	sql := "update tb_user set `password` = ? where `id` = ?"
	//对SQL语句进行预处理
	stmt, err := db.Prepare(sql)
	if err != nil {
		panic(err)
	}
	_, err = stmt.Exec("789", 1)
	if err != nil {
		//SQL执行失败,直接panic
		panic(err)
	}
	//提交事务
	tx.Commit()
}

削除操作

deleteパッケージを作成し、パッケージの下にdelete.goファイルを作成します

package main

import (
	"mysql/util"
)

func main() {
	//使用工具获取数据库连接
	db := util.InitDB()
	//开启事务
	tx, err := db.Begin()
	if err != nil {
		//事务开启失败,直接panic
		panic(err)
	}
	//准备SQL语句
	sql := "delete from tb_user where `id` = ?"
	//对SQL语句进行预处理
	stmt, err := db.Prepare(sql)
	if err != nil {
		panic(err)
	}
	_, err = stmt.Exec(1)
	if err != nil {
		//SQL执行失败,直接panic
		panic(err)
	}
	//提交事务
	tx.Commit()
}
元の記事85件を公開 賞賛された92件 訪問9219件

おすすめ

転載: blog.csdn.net/qq_45193304/article/details/105464606
おすすめ