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

目录
  • 0.前置知识
  • 1.架构
  • 2.功能模块
  • 3.实现流程
  • 4.代码
  • 5.结果
  • 总结

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增删改查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Go结合Gin导出Mysql数据到Excel表格

    目录 1.实现目标 2.使用的库 3.项目目录 4.主要代码编写 4.1.excelize.go(主要工具类) 4.2.userService.go(接受请求) 4.2.测试结果 5.文档代码地址 1.实现目标 Golang 使用excelize 导出表格到浏览器下载或者保存到本地.后续导入的话也会写到这里 2.使用的库 go get github.com/xuri/excelize/v2 Git地址:https://github.com/qax-os/excelize文档地址:https://

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

    目录 0.前置知识 1.架构 2.功能模块 3.实现流程 4.代码 5.结果 总结 0.前置知识 Go中的struct. mysql.Gin框架. Web基础. 1.架构 使用mysql作为数据库,Gin作为Web框架. 2.功能模块 1.自定义Person结构体 2.实现对Person的增删改查. 根据id查询或查询所有 插入 修改 删除 3.实现流程 1.建立数据库连接池db,然后连接指定的数据库. 2.编写Web接口(增删改查) 3.通过postman测试或者直接网页请求测试. 4.代码

  • java操作mysql实现增删改查的方法

    本文实例讲述了java操作mysql实现增删改查的方法.分享给大家供大家参考,具体如下: 首先,需要把MySQL与Java连接的jar(mysql-connector-java-5.1.6-bin.jar)包导入工程. package com.cn.edu; import java.beans.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatemen

  • 详解使用pymysql在python中对mysql的增删改查操作(综合)

    这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding:gbk import pymysql from builtins import int #将MysqlHelper的几个函数写出来 def connDB(): #连接数据库 conn=pymysql.connect(host="localhost",user="root&quo

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

    首先需要安装mysql模块:npm install mysql --save 然后创建user数据表: 接着使用nodejs对数据库进行增删改查: .[活动]2017 CSDN博客专栏评选 [评论送书]SQL优化.深度学习.数据科学家 CSDN日报20170527 --<人机大战,历史的见证> CSDN 日报 | 4.19-5.19 上榜作者排行出炉 nodejs操作mysql实现增删改查 . 标签: nodejsjavascript实例数据库mysql 2017-05-19 18:39 98

  • PHP MySql增删改查的简单实例

    mysql_connect()连接数据库 mysql_select_db选择数据库 mysql_fetch_assoc()获取结果集 mysql_query()执行sql语句 实例如下: <?php $con=@mysql_connect('localhost','root','root');//连接数据库 mysql_select_db('test',$con);//选择数据库 $userInfo=mysql_query("select * from user",$con);/

  • Mysql的增删改查语句简单实现

    Mysql的增删改查语句简单实现 增加记录: insert into tablename(...) values(...) //如果增加的记录包括所有的列,则不需要写数据列表 insert into tablename values(...) 删除记录: delete from tablename where condition ; 修改记录: update tablename set xx=xx , xx=xx... where condition ; alter table tablenam

  • Java连接MySQL数据库增删改查的通用方法(推荐)

    运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的. 我在之前写过一篇普通的Java连接MySQL数据库,大家可以看看,以便对比参考之后就知道差距了 数据库--MySQL-->Java篇 接下来我给大家讲讲如何将这个不可复用,又多重复的连接代码,封装起来,非常

  • Spring MVC实现mysql数据库增删改查完整实例

    最近刚学了springmvc框架,感觉确实方便了不少,减少了大量的冗余代码.就自己做了个小项目练练手,这是个初级的springmvc应用的项目,没有用到mybatis,项目功能还算完善,实现了基本的增删改查的功能. 项目环境: -系统:win10 -开发环境:eclipseOxygenReleaseCandidate3(4.7) -jdk版本:java1.8(121) -mysql:5.7 -spring:4.0 -tomcat:8.5 用到的技术: springmvcspringjspjdbc

  • Python连接Mysql进行增删改查的示例代码

    Python连接Mysql 1.安装对应的库 使用Python连接Mysql数据库需要安装相应的库 以管理员身份运行cmd,输入命令 pip install mysql.connector 安装完成后建立 test.py 写入 import mysql.connector 保存后运行 python test.py 用以测试模块库是否安装完成,如果不报错,说明安装完成 2.进行连接测试 编写connectTest.py文件 文件内容: import mysql.connector connect

  • Python接入MySQL实现增删改查的实战记录

    前言 我们经常需要将大量数据保存起来以备后续使用,数据库是一个很好的解决方案.在众多数据库中,MySQL数据库算是入门比较简单.语法比较简单,同时也比较实用的一个.本文主要介绍了Python接入MySQL实现增删改查的相关内容,下面话不多说,一起来看看详细的介绍吧 打开数据库连接,创建数据库和表 基本语法如下: execute(query, args=None) # query为字符串类型的sql语句 # args:可选的序列或映射,用于query的参数值. # 如果args为序列,query中

随机推荐