广告
返回顶部
首页 > 资讯 > 数据库 >怎么用golang运用mysql数据库
  • 841
分享到

怎么用golang运用mysql数据库

2023-06-29 11:06:18 841人浏览 独家记忆
摘要

这篇文章主要介绍怎么用golang运用mysql数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.依赖包import (    "database/s

这篇文章主要介绍怎么用golang运用mysql数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1.依赖包

import (    "database/sql"    "fmt"    _ "GitHub.com/Go-sql-driver/Mysql")

如果忘记导入mysql依赖包会打不开mysql

怎么用golang运用mysql数据库

2.main.go

package mainimport (    _ "container_cloud/pkg/config"    "container_cloud/pkg/utils/Httputil"    "container_cloud/routers"    "database/sql"    "fmt"    _ "github.com/go-sql-driver/mysql"    "net/http"    "time")func init() {    httputil.InitHttpTool()}// mysqlconst (    USERNAME = "root"    PASSWord = "Admin123"    NETWORK  = "tcp"    // TODO  本地调试时放开        // TODO 部署到环境时放开    SERVER   = "192.168.66.4"    PORT     = 3306    DATABASE = "container_cloud")func main() {    var err error    dsn := fmt.Sprintf("%s:%s@%s(%s:%d)/%s?parseTime=1&multiStatements=1&charset=utf8mb4&collation=utf8mb4_unicode_ci", USERNAME, PASSWORD, NETWORK, SERVER, PORT, DATABASE)    db, err := sql.Open("mysql", dsn)    if err != nil {        fmt.Printf("Open mysql failed,err:%v\n", err)        return    }    //最大连接周期,超过时间的连接就close    db.SetConnMaxLifetime(100 * time.Second)    //设置最大连接数    db.SetMaxOpenConns(100)    //设置闲置连接数    db.SetMaxIdleConns(16)    defer db.Close()    container := routers.InitapiRouter(db)    server := &http.Server{Addr: ":8090", Handler: container}    server.ListenAndServe()}

怎么用golang运用mysql数据库

数据库的一些设置

3.db对象注入ApiRouter

怎么用golang运用mysql数据库

需要用到数据库的模块需要传递db对象

4.reGISter层将db传给controller

package v1alpha1import (    "container_cloud/pkg/api"    "container_cloud/pkg/apiserver/query"    "container_cloud/pkg/apiserver/runtime"    "container_cloud/pkg/controller"    "container_cloud/pkg/domain"    "database/sql"    "github.com/emicklei/go-restful"    "k8s.io/apiMachinery/pkg/runtime/schema"    "net/http")const (    GroupName = "order.ictnj.io"    Version   = "v1alpha1")var GroupVersion = schema.GroupVersion{Group: GroupName, Version: Version}func AddToContainer(db *sql.DB) *restful.WEBService{    ws := runtime.NewWebService(GroupVersion)    orderController := controller.NewOrderController(db)    // 创建订单接口,pvc创建、负载创建的时候,是在特定命名空间下。(其实请求入参中也有命名空间字段,资源创建的时候也可以从入参中获取)    ws.Route(ws.POST("/namespaces/{namespace}/orders").        To(orderController.CreateOrder).        Param(ws.PathParameter("namespace", "namespace name")).        Returns(http.StatusOK, api.StatusOK, map[string]string{}).        Doc("create order."))    return ws}

5.controller层将db传给service或者mapper

type orderController struct {    Db *sql.DB}func NewOrderController(db *sql.DB) *orderController{    return &orderController{Db: db}}// 再创建订单    orderService := service.NewOrderService(o.Db)    orderService.CreateOrder(order)    result := map[string]string{"message": "success"}    response.WriteEntity(result)

怎么用golang运用mysql数据库

6.架构分析图

怎么用golang运用mysql数据库

当逻辑比较简单可以直接略过service,controller直接调用mapper

7.mapper示例

package serviceimport (    "container_cloud/pkg/api"    "container_cloud/pkg/apiserver/query"    "container_cloud/pkg/domain"    "database/sql"    "encoding/JSON"    "fmt"    "github.com/google/uuid"    "k8s.io/klog"    "strings"    "time")type OrderService struct {    Db *sql.DB}func NewOrderService(db *sql.DB) *OrderService{    return &OrderService{Db: db}}func (o *OrderService) CreateOrder(order domain.Order) {    order.CreateTime = time.Now()    var orderType uint8 = 1    order.OrderType = &orderType    uuid,_ := uuid.NewRandom()    order.Id = strings.ReplaceAll(uuid.String(), "-", "")    jsonbyte, _ := json.Marshal(order.OrderItem)    order.OrderItemJson = string(jsonbyte)    o.insertData(order)}func (o *OrderService) insertData(order domain.Order) {    stmt, _ := o.Db.Prepare(`INSERT INTO t_order (id, username, service_type, order_type, status, reason, order_item, create_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)    defer stmt.Close()    ret, err := stmt.Exec(order.Id, order.Username, order.ServiceType, order.OrderType, order.Status, order.Reason, order.OrderItemJson, order.CreateTime)    if err != nil {        fmt.Printf("insert data error: %v\n", err)        return    }    if LastInsertId, err := ret.LastInsertId(); nil == err {        fmt.Println("LastInsertId:", LastInsertId)    }    if RowsAffected, err := ret.RowsAffected(); nil == err {        fmt.Println("RowsAffected:", RowsAffected)    }}func (o *OrderService) ListOrders(query *query.Query, username string) (*api.ListResult, error){    // 查询总数量    totalRow, err := o.Db.Query("SELECT COUNT(*) FROM t_order WHERE username = ?", username)    if err != nil {        klog.Error("query orders count error", err)        return nil, err    }    total := 0    for totalRow.Next() {        err := totalRow.Scan(            &total,        )        if err != nil {            klog.Error("query orders count error", err)            continue        }    }    totalRow.Close()    // 查询订单列表    rows, err := o.Db.Query("select * from t_order where username = ? order by create_time desc limit ? offset ? ", username, query.Pagination.Limit, query.Pagination.Offset)    defer func() {        if rows != nil {            rows.Close()        }    }()    if err != nil {        klog.Error("query orders error", err)        return nil, err    }    items := make([]interface{}, 0)    for rows.Next() {        order := new(domain.Order)        err = rows.Scan(&order.Id, &order.Username, &order.ServiceType, &order.OrderType, &order.Status, &order.Reason, &order.OrderItemJson, &order.CreateTime)        if err != nil {            klog.Error("query orders error", err)            return nil, err        }        order.OrderItemJson = ""        items = append(items, *order)    }    return &api.ListResult{        TotalItems: total,        Items:      items,    }, nil}func (o *OrderService) GetOrder(id string) (*domain.Order, error) {    order := new(domain.Order)    row := o.Db.QueryRow("select order_item from t_order where id = ?", id)    if err := row.Scan(&order.OrderItemJson); err != nil {        klog.Error(err)        return nil, err    }    orderItems := &[]domain.OrderItem{}    json.Unmarshal([]byte(order.OrderItemJson), orderItems)    order.OrderItemJson = ""    order.OrderItem = *orderItems    return order, nil}func (o *OrderService) ListUserOrders(username string) (*[]domain.Order, error){    // 查询订单列表    rows, err := o.Db.Query("select * from t_order where username = ? order by create_time desc", username)    defer func() {        if rows != nil {            rows.Close()        }    }()    if err != nil {        klog.Error("query orders error", err)        return nil, err    }    items :=  make([]domain.Order,0)    for rows.Next() {        order := new(domain.Order)        err = rows.Scan(&order.Id, &order.Username, &order.ServiceType, &order.OrderType, &order.Status, &order.Reason, &order.OrderItemJson, &order.CreateTime)        if err != nil {            klog.Error("query orders error", err)            return nil, err        }        order.OrderItemJson = ""        items = append(items, *order)    }    return &items,nil}

以上是“怎么用golang运用mysql数据库”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么用golang运用mysql数据库

本文链接: https://www.lsjlt.com/news/324584.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 怎么用golang运用mysql数据库
    这篇文章主要介绍怎么用golang运用mysql数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.依赖包import (    "database/s...
    99+
    2023-06-29
  • 如何利用golang运用mysql数据库
    目录1.依赖包2.main.go3.db对象注入ApiRouter4.register层将db传给controller5.controller层将db传给service或者mappe...
    99+
    2022-11-13
  • golang怎么连接mysql数据库
    今天小编给大家分享一下golang怎么连接mysql数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。golang操作my...
    99+
    2023-06-30
  • golang怎么遍历mysql数据库
    本篇内容介绍了“golang怎么遍历mysql数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、连接MySQL数据库在开始遍历MySQ...
    99+
    2023-07-06
  • 使用golang怎么实现mysql数据库备份
    这期内容当中小编将会给大家带来有关使用golang怎么实现mysql数据库备份,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。map & json,在处理主键与外键...
    99+
    2022-10-18
  • 怎么在golang中操作mysql数据库
    这篇文章给大家介绍怎么在golang中操作mysql数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Golang操作mysql简介Golang操作mysql数据库的感觉有点想php...
    99+
    2022-10-18
  • 使用Golang怎么操作数据库
    使用Golang怎么操作数据库?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。golang适合做什么golang可以做服务器端开发,但golang很适合做日志处理、数据打包、...
    99+
    2023-06-14
  • mysql数据库怎么用
    这期内容当中小编将会给大家带来有关mysql数据库怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。mysql数据库怎么用1.启动MySQL服务器,在DOS下运行:d:...
    99+
    2022-10-18
  • 怎样利用运维面板管理mysql数据库
    本篇文章给大家分享的是有关怎样利用运维面板管理mysql数据库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MySQL的管理维护工具非常多,除...
    99+
    2022-10-18
  • golang怎么操作mysql数据
    在现代软件工程中,构建高效可靠的服务器应用程序所需的技术具有很高的要求。其中,使用 Go 语言调用关系型数据库是一个不可或缺的基础。在本文中,我们将使用 Go 语言中的标准包实现对 MySQL 数据进行查询和插入操作。什么是 MySQLMy...
    99+
    2023-05-14
    Golang go语言 mysql
  • 怎么使用mysql数据库
    下文给大家带来有关怎么使用mysql数据库内容,相信大家一定看过类似的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完怎么使用mysql数据库你一定会有所收获。一、数据库的基本概念1、 常用...
    99+
    2022-10-18
  • golang连接mysql数据库操作使用示例
    目录安装连接数据库处理类型(Handle Types)建表Exec使用Exec增删该示例sql预声明(Prepared Statements)QueryQueryxQueryRow和...
    99+
    2022-11-13
  • mysql数据库怎样安装和运行
    这篇文章主要介绍mysql数据库怎样安装和运行,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql安装和运行的方法:首先下载Mysql并解压;然后进入bin目录, 打开cmd;接...
    99+
    2022-10-18
  • Mysql数据库事务的特性及运用
    本文主要给大家简单讲讲Mysql数据库事务的特性及运用,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望Mysql数据库事务的特性及运用这篇文章可以给大家带来一...
    99+
    2022-10-18
  • PHP怎么应用MySQL数据库
    小编给大家分享一下PHP怎么应用MySQL数据库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL PHP 语法MySQL...
    99+
    2022-10-18
  • Golang使用geoip2数据库获取ip城市与运营商
    本篇文章讲述如何通过Golang使用geoip2数据库获取ip城市与运营商,并对传入的是ip还是域名进行处理,并打印以字符串或json形式进行判断 ip代理-Golang使用geoip2数据库获取ip城...
    99+
    2022-10-18
  • Golang怎么操作sqlite3数据库
    这篇文章主要介绍了Golang怎么操作sqlite3数据库的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang怎么操作sqlite3数据库文章都会有所收获,下面我们一起来看看吧。sqlite概述sqlit...
    99+
    2023-07-06
  • mySQL数据库中怎么创建数据库和用户
    本篇文章为大家展示了mySQL数据库中怎么创建数据库和用户,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。MySQL数据库系统可以支持许多不同的数据库,通常,每个应用...
    99+
    2022-10-18
  • 怎么用innobackupex备份mysql数据库
    本篇内容主要讲解“怎么用innobackupex备份mysql数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用innobackupex备份mysql数...
    99+
    2022-10-18
  • 怎么用perl访问mysql数据库
    小编给大家分享一下怎么用perl访问mysql数据库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一. 安装DBI模块步骤1:从...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作