三十六、Gin注册功能-检查账号是否存在

一、初始化

1、在cms.go中添加数据库连接方法

复制代码
func connDB(app *CmsApp) {
	mysqlDB, err := gorm.Open(mysql.Open("root:rootroot@tcp(localhost:3306)/?charset=utf8mb4&parseTime=True&loc=Local"))
	if err != nil {
		panic(err)
	}
	db, err := mysqlDB.DB()
	if err != nil {
		panic(err)
	}
	//最大连接数
	db.SetMaxOpenConns(4)
	//最大空闲连接,一般为最大连接数/2
	db.SetMaxIdleConns(2)
	mysqlDB = mysqlDB.Debug()
	app.db = mysqlDB
}

2、在cms.go中进行初始化数据库连接方法

复制代码
type CmsApp struct {
	db *gorm.DB
}

func NewCmsApp() *CmsApp {
	app := &CmsApp{}
	connDB(app)
	return app
}

二、完成account表的字段映射model

复制代码
type Account struct {
	ID        int64     `gorm:"column:id;primaryKey;autoIncrement:true"`
	UserId    string    `gorm:"column:user_id"`
	Password  string    `gorm:"column:password"`
	Nickname  string    `gorm:"column:nickname"`
	CreatedAt time.Time `gorm:"column:created_at"`
	UpdatedAt time.Time `gorm:"column:updated_at"`
}

func (a Account) TableName() string {
    //在数据表中省略了库名,写在了这里因为这样更灵活,方便做分库分表
	table := "cms_account.account"
	return table
}

三、完成account的dao方法

复制代码
package dao

import (
	"ConnetMain/internal/model"
	"gorm.io/gorm"
)
//声明为gorm的db
type AccountDao struct {
	db *gorm.DB
}
//调用时引入初始化CmsApp.db
func NewAccountDao(db *gorm.DB) *AccountDao {
	return &AccountDao{db: db}
}
//具体实现方法,查询是否存在这个user_id
func (a *AccountDao) IsExist(userID string) (bool, error) {
	var account model.Account
	err := a.db.Where("user_id=?", userID).First(&account).Error
    //返回查询不到错误返回false
	if err == gorm.ErrRecordNotFound {
		return false, err
	}
    //返回错误不为空
	if err != nil {
		return false, err
	}
	return true, nil
}

四、具体调用

在register.go中进行调用IsExist方法

复制代码
//声明dao包下NewAccountDao
accountDao := dao.NewAccountDao(c.db)
//调用IsExist方法
	isExist, err := accountDao.IsExist(req.UserID)
//发送错误则终止程序
	if err != nil {
		ctx.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
//返回true则代表能吃查询到相关数据则表示账号已经存在
	if isExist {
		ctx.JSON(http.StatusBadRequest, gin.H{"err": "账号已存在"})
	}

五、实验

相关推荐
懂点Tech4 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
金銀銅鐵5 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
catchadmin5 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
念何架构之路6 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x6 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
酷炫码神6 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
microrain6 小时前
SagooIoT 的缓存换后端只改一行配置,文件后端连 Redis 都不需要
物联网·缓存·golang·sagooiot
Elastic 中国社区官方博客7 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1887 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn8 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc