Gone框架介绍12 - 通过内置Goners支持数据库操作

我从头到尾实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能;自己觉得还挺好用的,推荐给你!也欢迎一起维护!
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/
如果可能,请帮忙在github上点个 ⭐️ ;万分感谢!!

以Mysql举个例子

源代码在这里可以找到

1.准备mysql服务,可以使用docker-compose快速启动一个Mysql服务

docker-compose.yaml 内容如下:

version: "3.5"

services:
  mysql:
    image: mysql:8.3
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: demo
    volumes:
      - ./data/mysql:/var/lib/mysql
    ports:
      - "3306:3306"

命令行执行下面代码,启动mysql服务:

docker-compose -f docker-compose.yaml up -d

2. 创建mod和配置

执行如下命令:

mkdir use-rdb
cd use-rdb

# 创建mod
go mod init use-rdb

# 创建数据库配置
mkdir config
cat >> config/default.properties<<eof

# 配置使用mysql数据库
database.driver-name=mysql

#数据源
database.dsn=root:123456@tcp(localhost:3306)/demo?charset=utf8mb4&loc=Local
eof

3. 编写代码如下:

文件名:main.go

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql" #📢⚠️需要特别注意,需要引入mysql的驱动
	"github.com/gone-io/gone"
	"github.com/gone-io/gone/goner"
	"github.com/gone-io/gone/goner/xorm" #📢⚠️需要特别注意,导入的是gone封装的xorm包
)

type Demo struct {
	Id   int64
	Data string
}

type SqlExecutor struct {
	gone.Flag
	db xorm.Engine `gone:"gone-xorm"`
}

func (e *SqlExecutor) Execute() {

    // 同步表结构
	err := e.db.Sync(new(Demo))
	if err != nil {
		println(err.Error())
		return
	}

	demo := Demo{Data: "hello gone"}

    // 插入数据
	_, err = e.db.Insert(
        &demo, 
        Demo{Data: "The most Spring programmer-friendly Golang framework, dependency injection, integrates Web. "},
    )

	if err != nil {
		println(err.Error())
		return
	}

	fmt.Printf("demo: %v\n", demo)


	var list []Demo

    // 读取数据
	err = e.db.Find(&list)
	if err != nil {
		println(err.Error())
		return
	}

	fmt.Printf("demo records:%v\n", list)

}

func main() {
	gone.
		Prepare(func(cemetery gone.Cemetery) error {
			// 通过 goner.XormPriest 将xorm相关的Goner埋葬到 cemetery
            _ = goner.XormPriest(cemetery)

			cemetery.Bury(&SqlExecutor{})
			return nil
		}).
        // 在Gone启动完成后执行
		AfterStart(func(in struct {
			e SqlExecutor `gone:"*"`
		}) {
			in.e.Execute()
		}).
		Run()
}

3. 运行代码

执行如下命令:

go mod tidy
go run main.go

运行结果如下:

2024-05-10 16:56:52.767|INFO|Init|Revive github.com/gone-io/gone/heaven
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/cemetery
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/goner/tracer/tracer
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/goner/logrus/logger
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/goner/config/config
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/goner/config/propertiesConfigure
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/goner/logrus/logger
2024-05-10 16:56:52.768|INFO|Init|==>Use Env: local
2024-05-10 16:56:52.768|WARNING|Init|properties: /var/folders/jv/rn9b7nhs2ls1n1j_lqj005r80000gn/T/go-build1582606196/b001/exe/config/default.properties not found. skipping
2024-05-10 16:56:52.768|WARNING|Init|properties: /var/folders/jv/rn9b7nhs2ls1n1j_lqj005r80000gn/T/go-build1582606196/b001/exe/config/local.properties not found. skipping
2024-05-10 16:56:52.768|WARNING|Init|properties: /Users/jim/works/gone-io/gone/example/use-rdb/config/local.properties not found. skipping
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/goner/config/config
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/goner/config/propertiesConfigure
2024-05-10 16:56:52.768|INFO|Init|Revive github.com/gone-io/gone/goner/xorm/engine
2024-05-10 16:56:52.768|INFO|Init|Revive main/SqlExecutor
2024-05-10 16:56:52.769|INFO|/Users/jim/go/pkg/mod/xorm.io/xorm@v1.3.2/log/logger_context.go:90||PING DATABASE mysql
2024-05-10 16:56:52.783|INFO|/Users/jim/works/gone-io/gone/cemetery.go:307||Revive /
demo:{1 hello gone}
demo records:[{1 hello gone} {2 The most Spring programmer-friendly Golang framework, dependency injection, integrates Web. }]

需要注意的点

1. github.com/gone-io/gone/goner 是对 xorm.io/xorm 的封装

封装的大概逻辑是:将xorm包装为一个Angel Goner;在Start方法中完成数据的连接;在Stop方法中关闭数据库连接。使用时不需要导入xorm.io/xorm包,只需要导入github.com/gone-io/gone/goner即可。封装中依赖了github.com/gone-io/gone/tree/main/goner/config来实现配置,在goner.XormPriest函数中已经自动完成了配置相关的Goner的埋葬
配置文件中支持的配置项:

  • database.driver-name 驱动的名称,支持 mysql、postgres 等主流数据库,具体可以参考 xorm文档
  • database.dsn 数据源,参考 xorm文档
  • database.max-idle-count 连接池,最大空闲连接数
  • database.max-open 连接池,最大连接数
  • database.max-lifetime 最大生存时间
  • database.showSql 是否打印执行的SQL

2. 通过gone-xormGonerId注入

在需要使用xorm引擎的Goner中,使用gone:"gone-xorm"标签注入xorm.Engine,属性可以具名也可以匿名:

type XormUser struct {
    //具名
    db xorm.Engine `gone:"gone-xorm"`
}

// 或者
type XormUser struct {
    //匿名
    xorm.Engine `gone:"gone-xorm"`
}

xorm.Engine中“继承”了xorm.io/xorm.EngineInterface接口,所以xorm.Engine支持xorm文档中的所有方法。

3. 注意导入的包

  • 需要导入数据库的驱动,不同数据库导入不一样:
import (
	_ "github.com/go-sql-driver/mysql"
)
  • 导入的xorm包是:github.com/gone-io/gone/goner/xorm,不是xorm.io/xorm:
import (
	"github.com/gone-io/gone/goner/xorm" #📢⚠️需要特别注意,导入的是gone封装的xorm包
)

求赞助

如果觉得还可以,请帮忙在github上点个 ⭐️吧:
github地址:https://github.com/gone-io/gone

福利🔥添加交流群,赠送 Golang 多套 学习资料,夯实基础👍🏻👍🏻

上一篇:Gone框架介绍11 - 通过内置Goners支持配置文件
下一篇:Gone框架介绍13 - Gone的Hook函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dapeng-大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值