我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Go使用Gin+mysql实现增删改查的详细实例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Go使用Gin+mysql实现增删改查的详细实例

0.前置知识

  • Go中的struct。
  • mysql、Gin框架。
  • Web基础。

1.架构

使用mysql作为数据库,Gin作为Web框架。

2.功能模块

1.自定义Person结构体

2.实现对Person的增删改查。

  • 根据id查询或查询所有
  • 插入
  • 修改
  • 删除

3.实现流程

1.建立数据库连接池db,然后连接指定的数据库。

2.编写Web接口(增删改查)

3.通过postman测试或者直接网页请求测试。

4.代码

package main

// 导入模块
import (
	"bytes"
	"database/sql"
	"fmt"
	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
	"log"
	"net/http"
	"strconv"
)


var db *sql.DB

// Person 自定义Person类
type Person struct {
	Id        int    `json:"id"`
	FirstName string `json:"first_name" form:"first_name"`
	LastName  string `json:"last_name" form:"last_name"`
}

func (p *Person) get(db *sql.DB) (person Person, err error) {
	row := db.QueryRow("SELECT id,first_name,last_name from person where id=?", p.Id)
	err = row.Scan(&person.Id, &person.FirstName, &person.LastName)
	if err != nil {
		return
	}
	return
}

func (p *Person) getAll(db *sql.DB) (persons []Person, err error) {
	rows, err := db.Query("select id,first_name,last_name from person")
	fmt.Println(rows)
	if err != nil {
		return
	}
	for rows.Next() {
		var person Person
		rows.Scan(&person.Id, &person.FirstName, &person.LastName)
		persons = append(persons, person)
	}
	defer rows.Close()
	return
}

func (p *Person) add(db *sql.DB) (Id int, err error) {
	stmt, err := db.Prepare("INSERT into person(first_name,last_name) values (?,?)")
	if err != nil {
		return
	}
	rs, err := stmt.Exec(p.FirstName, p.LastName)
	if err != nil {
		return
	}
	id, err := rs.LastInsertId()
	if err != nil {
		log.Fatalln(err)
	}
	Id = int(id)
	defer stmt.Close()
	return
}

func (p *Person) update(db *sql.DB) (rows int, err error) {
	stmt, err := db.Prepare("update person set first_name=?,last_name=? where id=?")
	if err != nil {
		log.Fatalln(err)
	}
	rs, err := stmt.Exec(p.FirstName, p.LastName, p.Id)
	if err != nil {
		log.Fatalln(err)
	}
	row, err := rs.RowsAffected()
	if err != nil {
		log.Fatalln(err)
	}
	rows = int(row)
	defer stmt.Close()
	return
}

func (p *Person) del(db *sql.DB) (rows int, err error) {
	stmt, err := db.Prepare("delete from person where id=?")
	if err != nil {
		log.Fatalln(err)
	}
	rs, err := stmt.Exec(p.Id)
	if err != nil {
		log.Fatalln(err)
	}
	row, err := rs.RowsAffected()
	if err != nil {
		log.Fatalln(err)
	}
	rows = int(row)
	defer stmt.Close()
	return
}

func test(db *sql.DB) {
	rows, err := db.Query("select * from person")
	if err != nil {
		return
	}
	defer rows.Close()
	var persons []Person
	for rows.Next() {
		var person Person
		rows.Scan(&person.Id, &person.FirstName, &person.LastName)
		persons = append(persons, person)
	}
	fmt.Println(persons)
}
func main() {
	var err error
	db, err := sql.Open("mysql", "root:xxxxx@tcp(127.0.0.1:3306)/go_project01?parseTime=true")
	if err != nil {
		log.Fatal(err.Error())
	}
	//defer db.Close()
	err = db.Ping()
	if err != nil {
		log.Fatal(err.Error())
	}
	//test(db)
	//创建路由引擎
	router := gin.Default()

	//查询,返回所有对象和对象个数
	router.GET("/persons", func(context *gin.Context) {
		p := Person{}
		persons, err := p.getAll(db)
		if err != nil {
			log.Fatalln(err)
		}
		context.JSON(http.StatusOK, gin.H{
			"result": persons,
			"count":  len(persons),
		})
	})
	//根据id查询
	router.GET("/person/:id", func(context *gin.Context) {
		var result gin.H
		id := context.Param("id")

		Id, err := strconv.Atoi(id)
		if err != nil {
			log.Fatalln(err)
		}
		p := Person{
			Id: Id,
		}
		person, err := p.get(db)
		if err != nil {
			result = gin.H{
				"result": nil,
				"count":  0,
			}
		} else {
			result = gin.H{
				"result": person,
				"count":  1,
			}
		}
		context.JSON(http.StatusOK, result)
	})
	//创建person
	router.POST("/person", func(context *gin.Context) {
		var p Person
		err := context.Bind(&p)
		if err != nil {
			log.Fatalln(err)
		}

		Id, err := p.add(db)
		if err != nil {
			log.Fatalln(err)
		}
		fmt.Println(Id)
		name := p.FirstName + " " + p.LastName
		context.JSON(http.StatusOK, gin.H{
			"message": fmt.Sprintf(" %s 成功创建", name),
		})
	})
	//更新update
	router.PUT("/person/:id", func(context *gin.Context) {
		var (
			p      Person
			buffer bytes.Buffer
		)

		id := context.Param("id")
		Id, err := strconv.Atoi(id)
		if err != nil {
			log.Fatalln(err)
		}
		err = context.Bind(&p)
		if err != nil {
			log.Fatalln(err)
		}
		p.Id = Id
		rows, err := p.update(db)
		if err != nil {
			log.Fatalln(err)
		}
		fmt.Println(rows)
		buffer.WriteString(p.FirstName)
		buffer.WriteString(" ")
		buffer.WriteString(p.LastName)
		name := buffer.String()

		context.JSON(http.StatusOK, gin.H{
			"message": fmt.Sprintf("成功更新到%s", name),
		})
	})
	//删除person
	router.DELETE("/person/:id", func(context *gin.Context) {
		id := context.Param("id")

		Id, err := strconv.ParseInt(id, 10, 10)
		if err != nil {
			log.Fatalln(err)
		}
		p := Person{Id: int(Id)}
		rows, err := p.del(db)
		if err != nil {
			log.Fatalln(err)
		}
		fmt.Println("delete rows: ", rows)

		context.JSON(http.StatusOK, gin.H{
			"message": fmt.Sprintf("成功删除用户:%s", id),
		})
	})
	router.Run(":8080")
}

5.结果

Go使用Gin+mysql实现增删改查的详细实例

Go使用Gin+mysql实现增删改查的详细实例

总结 

到此这篇关于Go使用Gin+mysql实现增删改查的文章就介绍到这了,更多相关Go Gin+mysql增删改查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Go使用Gin+mysql实现增删改查的详细实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Go使用Gin+mysql实现增删改查的详细实例

目录0.前置知识1.架构2.功能模块3.实现流程4.代码5.结果总结 0.前置知识Go中的struct。mysql、Gin框架。Web基础。1.架构使用mysql作为数据库,Gin作为Web框架。2.功能模块1.自定义Person
2022-12-02

nodejs操作mysql实现增删改查的实例

首先需要安装mysql模块:npm install mysql --save 然后创建user数据表:接着使用nodejs对数据库进行增删改查:.【活动】2017 CSDN博客专栏评选 【评论送书】SQL优化、深度学习、数据科学家
2022-06-04

mysql分区表的增删改查的实现示例

本文详细介绍了MySQL分区表的增删改查操作示例。增删改查操作分区包括插入数据、删除数据、修改数据和查询数据。插入数据时使用PARTITIONBY子句指定分区,删除数据时使用DELETE语句并指定分区,修改数据时使用UPDATE语句并指定分区,查询数据时可以使用SELECT语句查询特定分区或所有分区。为了优化查询性能,建议使用分区键作为查询条件,使用覆盖索引减少数据访问,并合理分配数据到分区中以实现均匀的数据分布。
mysql分区表的增删改查的实现示例
2024-04-02

SpringBoot整合MyBatis实现增删改查(简单,详细)

新建springboot工程 若选择https://start.spring.io下一步失败 则选择Custom,输入:https://start.aliyun.com后下一步 添加需要的依赖 添加其他依赖,全部依赖如下: d
2023-08-19

Entity Framework使用DBContext实现增删改查

这篇文章介绍了Entity Framework使用DBContext实现增删改查的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

如何利用PHP+Mysql实现增删改查

这篇文章主要介绍了如何利用PHP+Mysql实现增删改查,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP+Mysql实现增删改查PHP 是一种创建动态交互性站点的强有力的
2023-06-22

JavaWeb如何使用DBUtils实现增删改查

这篇文章主要讲解了“JavaWeb如何使用DBUtils实现增删改查”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaWeb如何使用DBUtils实现增删改查”吧!JavaWeb 使用D
2023-06-21

java中JDBC技术连接Mysql实现增删改查超级详细的教程

文章目录 一、JDBC基本介绍1.简单介绍2.准确介绍 二、IDEA项目中导入Mysql驱动jar包三、使用java程序连接Mysql数据库进行增删改查操作1.创建Mysql数据库连接2.实现增加记录3.实现删除记录4.实现修改
java中JDBC技术连接Mysql实现增删改查超级详细的教程
2023-12-23

Java怎么使用jdbc连接实现对MySQL增删改查

这篇文章主要介绍了Java怎么使用jdbc连接实现对MySQL增删改查的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么使用jdbc连接实现对MySQL增删改查文章都会有所收获,下面我们一起来看看吧。1
2023-07-05

使用PyMySQL怎么实现增删查改操作

使用PyMySQL怎么实现增删查改操作?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、PyMySQL的使用步骤:2、案例:2.1 查询数据库中的表的信息: # 需求:查询
2023-06-15

一文带你吃透JSP,增删改查实战案例详细解读

文章目录 前言JSP 概述JSP快速入门搭建环境导入JSP依赖创建 JSP 页面编写代码测试 JSP原理JSP 脚本实战案例JSP缺点发展阶段EL 表达式概述实战案例 域对象JSTL 标签用法1用法2 前言 不得不说
2023-08-17

编程热搜

目录