基于Gin、Gorm实现的在线练习系统之项目梳理

本文介绍了如何在Go项目中使用GORM库建立数据库模型,并与MySQL数据库中的表结构同步。创建了problem、user、category和submit四张表的模型文件,每个模型文件包含了字段定义及TableName方法以指定对应数据库表名。
摘要由CSDN通过智能技术生成

go/gin/gorm/mysql等环境搭建略过;首先使用Navicat新建一个数据库gin_gorm_online_judge用于本项目,内容如下图:
在这里插入图片描述
在本库中新建问题表problem如下图:
在这里插入图片描述

我们正常的项目逻辑(项目流程)应该是我们定义完一张表之后我们需要去我们的gorm里面把它的 model也给它同步过去;

我们在Goland新建目录models目录,然后新建problem.go文件如下所示:
在这里插入图片描述
problem.go内容如下:

package models

import "gorm.io/gorm"

type Problem struct {
	gorm.Model
	Identity   string `gorm:"column:identity;type:varchar(36);" json:"identity"`
	CategoryId string `gorm:"column:category_id;type:varchar(255);" json:"category-id"`
	Title      string `gorm:"column:title;type:varchar(255)" json:"title"`
	Content    string `gorm:"column:content;type:text" json:"content"`
	MaxRuntime int    `gorm:"column:max_runtime;type:int(11);" json:"max-runtime"`
	MaxMem     int    `gorm:"column:max_mem;type:int(11);" json:"max_mem"`
}

func (table *Problem) TableName() string {
	return "problem"
}

新建user表如下:
在这里插入图片描述

新建 user.go如下:

package models

import "gorm.io/gorm"

type User struct {
	gorm.Model
	Identity string `gorm:"column:identity;type:varchar(36);" json:"identity"`
	Name     string `gorm:"column:name;type:varchar(100)" json:"name"`
	Password string `gorm:"column:password;type:varchar(32)" json:"password"`
	Phone    string `gorm:"column:phone;type:varchar(20)" json:"phone"`
	Mail     string `gorm:"column:mail;type:varchar(100)" json:"mail"`
}

func (table *User) TableName() string {
	return "user"
}

新建category表:
在这里插入图片描述
新建category.go文件:

package models

import "gorm.io/gorm"

type Category struct {
	gorm.Model
	Identity string `gorm:"column:identity;type:varchar(36);" json:"identity"`
	Name     string `gorm:"column:name;type:varchar(100);" json:"name"`
	ParentId int    `gorm:"column:parent_id;type:int(11);" json:"parent_id"`
}

func (table *Category) TableName() string {
	return "category"
}

新建submit表:
在这里插入图片描述
新建submit.go文件如下:

package models

import "gorm.io/gorm"

type Submit struct {
	gorm.Model
	Identity        string `gorm:"column:identity;type:varchar(36);" json:"identity"`
	ProblemIdentity string `gorm:"column:problem_identity;type:varchar(36)" json:"problem_identity"`
	UserIdentity    string `gorm:"column:user_identity;type:varchar(36)" json:"user_identity"`
	Path            string `gorm:"column:path;type:varchar(20)" json:"path"`
}

func (table *Submit) TableName() string {
	return "submit"
}

整体构建完后目录如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JIeJaitt

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

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

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

打赏作者

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

抵扣说明:

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

余额充值