概述
目录
依赖安装
Mmysql配置?
Mysql初始化
添加表
表新增操作
测试接口
小结
学习笔记,写到哪是哪。
接着上一篇文章:Go语学习笔记 - 增加文件下载工具 | Web框架Gin(六)_的博客-CSDN博客
我已经把暂时想到的工具类补充好了,开始数据库的连接和使用。
从这篇开始会慢慢在增加数据库的相关操作。
项目地址:github地址
依赖安装
首先安装一下所需要的gorm和mysql驱动。
安装指令如下:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
Mmysql配置
修改配置文件toml_config.go,增加mysql相关配置。
具体的使用方式参考:Go语学习笔记 - 配置文件使用、日志配置 | Web框架Gin(二)_的博客-CSDN博客_config.toml
toml_config.go文件调整后代码如下:
package toml
import (
"fmt"
"github.com/spf13/viper"
)
type TomlConfig struct {
AppName string
Log LogConfig
Mysql MysqlConfig
}
// 日志保存地址
type LogConfig struct {
Path string
Level string
}
// 日志保存地址
type MysqlConfig struct {
Host string
User string
Password string
DbName string
Port int64
}
var c TomlConfig
func init() {
// 设置文件名
viper.SetConfigName("config")
// 设置文件类型
viper.SetConfigType("toml")
// 设置文件路径,可以多个viper会根据设置顺序依次查找
viper.AddConfigPath(".")
viper.AutomaticEnv()
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Errorf("fatal error config file: %s", err))
}
viper.Unmarshal(&c)
}
func GetConfig() TomlConfig {
return c
}
可以看到增加了MysqlConfig结构体。
配置文件config.toml文件增加mysql对应配置,修改后如下:
appName = "learn-gin"
[log]
level = "debug"
path = "logs/learn.log"
[mysql]
host = "xx.xx.xx.xx"
user = "root"
password = "xxxxxx"
dbName = "test-c"
port = 3306
Mysql初始化
增加数据库连接初始化代码,mysql_init.go文件添加至config/mysql下,如下图。
mysql_init.go文件代码如下:
package mysql
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"learn-gin/config/toml"
)
var _db *gorm.DB
func init() {
username := toml.GetConfig().Mysql.User //账号
password := toml.GetConfig().Mysql.Password //密码
host := toml.GetConfig().Mysql.Host //数据库地址,可以是Ip或者域名
port := toml.GetConfig().Mysql.Port //数据库端口
Dbname := toml.GetConfig().Mysql.DbName //数据库名
timeout := "10s" //连接超时,10秒
//拼接下dsn参数, dsn格式可以参考上面的语法,这里使用Sprintf动态拼接dsn参数,因为一般数据库连接参数,我们都是保存在配置文件里面,需要从配置文件加载参数,然后拼接dsn。
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
var err error
//连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
_db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
sqlDB, _ := _db.DB()
//设置数据库连接池参数
sqlDB.SetMaxOpenConns(100) //设置数据库连接池最大连接数
sqlDB.SetMaxIdleConns(20) //连接池最大允许的空闲连接数,如果没有sql任务需要执行的连接数大于20,超过的连接会被连接池关闭。
}
func GetDB() *gorm.DB {
return _db
}
可以通过GetDB方法获取_db进行操作。
添加表
我们在数据库创建一张测试表,当前也可以通过gorm迁移一张表结构体到数据库,我们这里暂时先创建。表(表名:student)结构如下:
在项目文件夹下增加db_entity文件夹存放表实体。如下图:
student_entity.go代码如下:
package db_entity
import "time"
type Student struct {
Id int32 `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT;comment:'id'"`
Name string `json:"name" gorm:"column:name;type:varchar(255);comment:'名字'"`
Age int64 `json:"age" gorm:"column:age;comment:'年龄'"`
Content string `json:"content" gorm:"column:content;type:varchar(255);comment:'描述'"`
UpdateTime time.Time `json:"update_time" gorm:"column:update_time"`
DelFlag int64 `json:"del_flag" gorm:"column:del_flag;comment:'删除标识'"`
}
// 自定义表名
func (Student) TableName() string {
return "student"
}
表新增操作
按照之前项目结构优化后的方式添加接口,参考:Go语学习笔记 - 项目规范结构调整 | Web框架Gin(三)_的博客-CSDN博客
在app/services目录下增加student._service.go文件,代码如下:
package services
import (
"learn-gin/app/pojo/req"
"learn-gin/app/pojo/rsp"
"learn-gin/config/log"
"learn-gin/config/mysql"
"learn-gin/db_entity"
"time"
)
type StudentService interface {
AddStudent(req *req.StudentAddReq)
}
type StudentImpl struct {
}
// 添加学生
func (t StudentImpl) AddStudent(req *req.StudentAddReq) rsp.ResponseMsg {
log.Logger.Info("添加学生参数:", log.Any("StudentReq", req))
_db := mysql.GetDB()
var _student db_entity.Student
_student.Name = req.Name
_student.Age = req.Age
_student.Content = req.Content
_student.UpdateTime = time.Now()
_student.DelFlag = 0
_db.Create(&_student)
return *rsp.SuccessMsg("添加成功")
}
其中app/pojo/req下增加请求结构体StudentAddReq,在app/pojo/req目录下增加student_request.go文件。
代码如下:
package req
type StudentAddReq struct {
Name string `json:"name"`
Age int64 `json:"age"`
Content string `json:"content"`
}
在app/services/service.go增加student服务对象,代码如下:
package services
var (
TestServ = &Test{}
StudentServ = &StudentImpl{}
)
在app/controllers下增加student_controller.go文件。
代码如下:
package controllers
import (
"encoding/json"
"github.com/gin-gonic/gin"
"learn-gin/app/pojo/req"
"learn-gin/app/services"
"learn-gin/config/log"
"net/http"
)
type StudentController struct {
}
func (s StudentController) StudentAddOne(context *gin.Context) {
var addStudentReq req.StudentAddReq
log.Logger.Info("StudentAddOne接口")
// 将前端穿过来的json数据绑定存储在这个实体类中,BindJSON()也能使用
if err := context.ShouldBindJSON(&addStudentReq); err != nil {
log.Logger.Panic("参数异常")
}
if _, err := json.Marshal(addStudentReq); err != nil {
log.Logger.Panic("参数解析异常")
}
_rsp := services.StudentServ.AddStudent(&addStudentReq)
context.JSON(http.StatusOK, _rsp)
}
在app/controllers/controllers.go文件增加student_controller中的控制层对象。
代码如下:
package controllers
var (
TestCtrl = &TestController{}
StudentCtrl = &StudentController{}
)
在app/router目录下增加student_router.go文件。
代码如下:
package router
import (
"github.com/gin-gonic/gin"
"learn-gin/app/controllers"
)
func StudentRouter(r *gin.Engine) {
r.POST("/student/addOne", controllers.StudentCtrl.StudentAddOne)
}
在app/router/router.go下绑定StudentRouter。
package router
import "github.com/gin-gonic/gin"
func InitRouter(r *gin.Engine) {
// 测试路由
TestRouter(r)
// 学生路由
StudentRouter(r)
}
测试接口
代码完成后,我们测试一下表新增接口。
OK,我们看一下表数据。
没什么问题。
小结
没想到写着写着都有30篇了,gorm还在研究,后面会把表操作都写一写。
最后
以上就是可耐香菇为你收集整理的Go语学习笔记 - gorm使用 - 数据库配置、表新增 Web框架Gin(七)依赖安装Mmysql配置Mysql初始化添加表表新增操作测试接口小结的全部内容,希望文章能够帮你解决Go语学习笔记 - gorm使用 - 数据库配置、表新增 Web框架Gin(七)依赖安装Mmysql配置Mysql初始化添加表表新增操作测试接口小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复