基于Golang TCP 开发网络游戏 CLI四川麻将 - 3. 使用grom进行Mysql存储数据

这篇博客介绍了如何在Golang中使用Gorm库连接和操作MySQL数据库,包括初始化数据库连接、设置最大连接数以及创建用户表。同时展示了User实体的定义和UserDao层的实现,用于用户数据的增删改查操作。通过UserDao的Where方法和Get方法,可以方便地根据ID和用户名查询用户信息。

项目地址

https://github.com/mangenotwork/CLI-Sichuan-Mahjong

Grom

https://learnku.com/docs/gorm/v1/connecting_to_the_database/3784

封装一下

package db

import (
	"fmt"
	"log"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"

)

var MysqlDB *gorm.DB

func InitMysqlDB(user, pass, host, port, dbname string) {
	var err error
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", user, pass, host, port, dbname) + "?charset=utf8mb4&parseTime=true&loc=Local&timeout=5s"
	log.Println("连接数据 = ", dsn)
	MysqlDB, err = gorm.Open("mysql", dsn)
	if err != nil {
		panic(err)
	}
	MysqlDB.LogMode(true)
	MysqlDB.DB().SetMaxIdleConns(10)
	MysqlDB.DB().SetMaxOpenConns(20)
}

func GetMysqlDB() *gorm.DB {
	return MysqlDB
}

调用方

User 实体

// models/User.go

package models

import (
	"log"

	"github.com/mangenotwork/CLI-Sichuan-Mahjong/common/db"
)

type User struct {
	Id int64 `gorm:"primary_key;column:id;size:11" json:"id"`
	Name string `gorm:"column:user_name;size:20" json:"user_name"`
	Password string `gorm:"column:password;size:32" json:"password"`
}

//TableName  默认获取table name
func (*User) TableName() string {
	return "tbl_user"
}

//CreateTable 创建表
func (u *User) CreateTable(){
	if !db.MysqlDB.HasTable(u.TableName()) {
		log.Println("CreateTable User")
		db.MysqlDB.CreateTable(&User{})
	}

User Dao层,增删改查

// dao/User.go
package dao

import (
	"errors"

	"github.com/mangenotwork/CLI-Sichuan-Mahjong/Server/models"
	"github.com/mangenotwork/CLI-Sichuan-Mahjong/common/db"
)

func User() UserDaoInterface{
	return &userDao{}
}

type UserDaoInterface interface {
	WhereId(id int64) *userDao
	WhereName(name string) *userDao
	Create(user models.User) error
	IsHave(userName string) bool
	Get() (models.User, error)
}

type userDao struct {
	id int64	// 查询字段id
	name string	// 查询字段name
}

func (d *userDao) WhereId(id int64) *userDao {
	d.id = id
	return d
}

func (d *userDao) WhereName(name string) *userDao {
	d.name = name
	return d
}

func (d *userDao) Get() (models.User, error) {
	var (
		data models.User
		err error
		ok = false
		dbConn = db.MysqlDB
	)
	dbConn = dbConn.Table(data.TableName())

	if d.id != 0 {
		ok = true
		dbConn = dbConn.Where("id=?", d.id)
	}

	if len(d.name) > 0 {
		ok = true
		dbConn = dbConn.Where("user_name=?", d.name)
	}

	if ok {
		err = dbConn.First(&data).Error

	} else {
		err = errors.New("参数不够")
	}

	return data, err
}

func (d *userDao) IsHave(userName string) bool {
	d.name = userName
	data, _ := d.Get()
	if data.Id > 0 {
		return true
	}
	return false
}

func (d *userDao) Create(user models.User) error {
	var dbConn = db.MysqlDB
	return dbConn.Table(user.TableName()).Create(&user).Error
}

调用方

//查询user
user, _ := dao.User().WhereName(v.Name).Get()
//密码判断
if user.Id == 0 || user.Password != utils.MD5(v.Password) {
	//doing...
}

上一篇 2.Tcp通讯
https://blog.youkuaiyun.com/Man_ge/article/details/120226415

下一篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值