go-admin框架分析(4)基于gorm的数据库模块

代码地址,db分支:https://gitee.com/lsjWeiYi/go-admin/tree/db/

web系统到现在还不能连接数据库。作为核心部件,该实现了。

其实网上使用gorm实现db挺容易的,但是go-admin封装得很复杂,特别是查询的时候,它不用常见的查询方式,使用的那种方式,多少有点难理解。

代码实现过程

修改配置文件

添加以下内容:

  database:
    # 数据库类型 mysql,sqlite3, postgres
    driver: mysql
    # 数据库连接字符串 mysql 缺省信息 charset=utf8&parseTime=True&loc=Local&timeout=1000ms
    source: root:Lsjweiyi123.@tcp(120.25.238.155:3306)/go_admin?charset=utf8mb4&parseTime=True&loc=Local&timeout=1000ms

初始化

首先呢,需要在cmd/api/server.go里添加代码初始化,这一步是初始化gorm,然后添加到全局变量(go-admin封装好了),之后调用,都是使用的这个对象,而不是再次初始化。

	//1. 读取配置
	config.Setup(
		file.NewSource(file.WithPath(configYml)), // 读取配置文件
		database.Setup, // 数据库初始化
	)

这一步需要添加代码:
在这里插入图片描述

ps:在这一步,我发现使用go mod tidy,它添加的依赖是:

gorm.io/driver/mysql v1.0.3

然后go build会报错:

C:\Users\Administrator\go\pkg\mod\gorm.io\driver\mysql@v1.0.3\migrator.go:220:24: cannot use column (type Column) as type gorm.ColumnType in append:
        Column does not implement gorm.ColumnType (missing AutoIncrement method)

看了一圈不知道问题在哪,以为我漏了哪里的代码,但是查询无果,偶然间升级版本,不再报错:

gorm.io/driver/mysql v1.3.2

感觉像是bug。

添加中间件

这一步,它的流程是这样,每当http请求进来,它都在gin.Context对象里添加一个对DB的指针,然后在接口层就可以通过引用该指针去连接数据库。

这个逻辑可以从它的代码:github.com\go-admin-team\go-admin-core\sdk@v1.3.10\pkg\utils.go中找到代码解释:

// GetOrm 获取orm连接
func GetOrm(c *gin.Context) (*gorm.DB, error) {
	idb, exist := c.Get("db") // 这里就是获取中间件添加的那个指针
	if !exist {
		return nil, errors.New("db connect not exist")
	}
	switch idb.(type) {
	case *gorm.DB:
		//新增操作
		return idb.(*gorm.DB), nil
	default:
		return nil, errors.New("db connect not exist")
	}
}

添加中间件同样是在那个init.go中:

	// 数据库链接
	r.Use(WithContextDb)

需要的文件是:
在这里插入图片描述
PS: 个人认为, 这里的设计不是很合理,怎么把指针绑定在gin.Context里呢。这样不就把他们耦合起来了吗?仅仅个人观点。

到此,依赖及初始化的配置完成了,下面写代码看看效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lsjweiyi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值