当前位置: 首页 > 工具软件 > go-db > 使用案例 >

Go语言---动态查询数据库

澹台冯浩
2023-12-01


一、引入数据库包

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

二、使用步骤

1.创建全局对象

var db *sql.DB

func init(){
	//数据库连接---查询/新增
	db, _ = sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/plat_service?charset=utf8")
	if err := db.Ping(); err != nil {
		fmt.Println("open database fail")
		return
	}
	//defer db.Close()
}

type User struct {
	Id				int
	Name			string
}

创建全局对象,并使用init初始化数据库连接


2.CRUD操作

func SelectDataByName(name string) {
	var values []interface{}
	sql := "SELECT id, `name` FROM tb_user"
	if !isNull(name) {
		sql += " WHERE name = ?"
		values = append(values, name)
	}
	rows, err := db.Query(sql, values...)
	if err != nil {
		return
	}
	var user model.User
	for rows.Next() {
		_=rows.Scan(&user.Id, &user.Name)
	}
	fmt.Println(user)
}

我们需要利用到不定量参数的 ‘…’ 方法,定义一个数组,并按照需求将参数赋值到数组中,然后将素组切片传入


3.编写接口

func main() {
	r := gin.Default()
	r.POST("/user", func(context *gin.Context) {
		name := context.DefaultPostForm("name", "小明")		//获取默认格式下的参数,并赋值一个默认值
		data := service.SelectDataByName(name)				//调用service查询,Go语言中如果需要外部调用那么方法名/属性名/对象名需要大写
		context.JSON(200, data)
	})	
	r.Run(":10010")
}

4.结果

{
	"Id": 1,
	"Name": "小赵"
}

不同的框架可能处理方式不同,文章只是作为记录存在,以防忘记

 类似资料: