基于Golang TCP 开发网络游戏 CLI四川麻将 - 3. 使用grom进行Mysql存储数据
项目地址
https://github.com/mangenotwork/CLI-Sichuan-Mahjong
Grom
https://learnku.com/docs/gorm/v1/connecting_to_the_database/3784
封装一下
package dbimport ("fmt""log""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql")var MysqlDB *gorm.DBfunc InitMysqlDB(user, pass, host, port, dbname string) {var err errordsn := 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.gopackage modelsimport ("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 daoimport ("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) *userDaoWhereName(name string) *userDaoCreate(user models.User) errorIsHave(userName string) boolGet() (models.User, error)
}type userDao struct {id int64 // 查询字段idname string // 查询字段name
}func (d *userDao) WhereId(id int64) *userDao {d.id = idreturn d
}func (d *userDao) WhereName(name string) *userDao {d.name = namereturn d
}func (d *userDao) Get() (models.User, error) {var (data models.Usererr errorok = falsedbConn = db.MysqlDB)dbConn = dbConn.Table(data.TableName())if d.id != 0 {ok = truedbConn = dbConn.Where("id=?", d.id)}if len(d.name) > 0 {ok = truedbConn = 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 = userNamedata, _ := d.Get()if data.Id > 0 {return true}return false
}func (d *userDao) Create(user models.User) error {var dbConn = db.MysqlDBreturn 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.csdn.net/Man_ge/article/details/120226415
下一篇
基于Golang TCP 开发网络游戏 CLI四川麻将 - 3. 使用grom进行Mysql存储数据相关推荐
- 基于Golang TCP 开发网络游戏 CLI四川麻将 - 1.选型与结构定义
项目介绍 基于golang tcp 开发的命令行界面网络游戏 四川麻将血战到底:下图是初步效果界面 项目地址 https://github.com/mangenotwork/CLI-Sichuan-M ...
- 基于Golang TCP 开发网络游戏 CLI四川麻将 - 2.Tcp通讯
项目地址 https://github.com/mangenotwork/CLI-Sichuan-Mahjong 数据传输结构定义 这里使用gob序列化数据 // entity.gotype Tran ...
- 基于Castle ActiveRecord开发Domain Model详解(一)对象关系到数据表的映射
Castle Project非常庞大,ActiveRecord是其中一个非常适合用于Domain Model开发的O/R Mapping框架.它使用.NET的反射特性无需配置文件,集成NHiberna ...
- 基于layuiCMS2.0开发后台管理系统,实现自定义分页并动态加载数据表格的示例...
2019独角兽企业重金招聘Python工程师标准>>> 公司让做一个app基础数据管理后台系统,前端就以layuiCMS2.0为模板,拷贝到项目resources/static目录下 ...
- 「实战案例」基于Python语言开发的信用评分卡
信用风险计量模型可以包括跟个人信用评级,企业信用评级和国家信用评级.人信用评级有一系列评级模型组成,常见是A卡(申请评分卡).B卡(行为模型).C卡(催收模型)和F卡(反欺诈模型). 今天我们展示的是 ...
- 基于SECS协议开发的简明教程
很有必要把苦程序员久矣的SECS/GEM了结了,于是诞生了本系列文章八篇和开发包,不需要看近500页PDF就可以轻松完成SECS功能支持. 0.SECS SDK 开发包 这个开发包是对SEMI SEC ...
- 基于SECS协议开发的简明教程(7)
接着前面6篇SECS/GEM开发教程系列. 基于SECS协议开发的简明教程(1)-怎么搭建支持SECS工程 基于SECS协议开发的简明教程(2)-怎么编辑交换数据的ID 基于SECS协议开发的简明教程 ...
- 基于SECS协议开发的简明教程(5)
接着前面4篇SECS/GEM开发教程系列. 基于SECS协议开发的简明教程(1)-怎么搭建支持SECS工程 基于SECS协议开发的简明教程(2)-怎么编辑交换数据的ID 基于SECS协议开发的简明教程 ...
- 基于SECS协议开发的简明教程(4)
本文的基础是前面的三篇,建议先花几分钟过一遍大概,然后接着看本篇,更系统化. 基于SECS协议开发的简明教程(1)-怎么利用SECS SDK搭建工程 基于SECS协议开发的简明教程(2)-怎么编辑交换 ...
最新文章
- 含有多个java程序的文件夹导入MyEclipes 出现错误的解决办法
- 【STM32】端口复用和重映射,完全重映射,部分重映射
- 以太坊是什么 - 以太坊开发入门指南
- 2021牛客多校7 - xay loves monotonicity(线段树区间合并)
- 大数据背后是个万亿市场
- 服务器上build.xml文件乱码解决(亲测有效)
- 前馈神经网络对mnist数据集实战
- JavaScript函数的两种声明方式(4)
- 更改Mysql 密码的4种方法(转)
- nginx相关概念——负载均衡和动静分离
- linux中的numa和swap
- 计算机多媒体技术英文,计算机多媒体技术在英语听力测试中的应用
- 【EMD和EEMD】EEMD工具箱使用
- 监控系统 服务器配置,监控系统服务器配置
- office picture manger图片处理工具下载与安装教程
- 山东专升本计算机知识点(中)
- 第十章:动态组件,插槽,自定义指令
- [ 深度学习 ] —— 优化策略:(1) Label Smoothing Regularization(LSR)
- 山东大学项目实训十六——可控音乐变压器Controllable Music Transformer
- node对文件的读取和修改