package main
import (
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"net/http"
)
// 定义模型
type Todo struct {
ID int `json:"id"`
Title string `json:"title"`
Status bool `json:"status"`
}
// 全局声明
var DB *gorm.DB
var mysqlLogger logger.Interface
func init() {
username := "root" // 账号
password := "asd123456" // 密码
host := "127.0.0.1" // 数据库地址,本机或远程
port := 3306 // 端口号
Dbname := "gorm" // 数据库名
timeout := "10s" // 连接超时
// 要显示的日志等级
mysqlLogger = logger.Default.LogMode(logger.Info)
// 字符串拼接
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s",
username, password, host, port, Dbname, timeout)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
SkipDefaultTransaction: true, // 跳过默认事务
NamingStrategy: schema.NamingStrategy{
TablePrefix: "f_", // 表名前缀
SingularTable: true, // 单数表名,默认复数
NoLowerCase: true, // 关闭小写转换
},
//Logger: mysqlLogger,
})
if err != nil {
panic("连接数据库失败: " + err.Error())
}
// 连接成功 ,换名大DB
DB = db
}
func main() {
// 模型绑定 建表
DB.AutoMigrate(&Todo{}) // 在数据库中映射为表
r := gin.Default()
// 告诉gin框架模板文件引用的静态文件哪里找
r.Static("/static", "static")
// 告诉gin框架哪里找模板文件
r.LoadHTMLGlob("templates/*")
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
})
r.GET("/struct", func(c *gin.Context) {
})
// v1
v1Group := r.Group("v1")
{
// 待办事项
// 添加
v1Group.POST("/todo", func(c *gin.Context) {
// 1.从请求中把数据拿出来
var todo Todo
c.BindJSON(&todo)
// 2.存入数据
if err := DB.Create(&todo).Error; err != nil {
c.JSON(http.StatusOK, gin.H{
"error": err.Error()})
} else {
c.JSON(http.StatusOK, todo)
// 返回值
//c.JSON(http.StatusOK, gin.H{
// "code": 2000,
// "msg": "success",
// "data": todo,
//})
}
// 3.返回响应
})
// 查看 所有
v1Group.GET("/todo", func(c *gin.Context) {
var todolist []Todo
if err := DB.Find(&todolist).Error; err != nil {
c.JSON(http.StatusOK, gin.H{
"error": err.Error()})
} else {
c.JSON(http.StatusOK, todolist)
}
})
// 查看单条记录
v1Group.GET("/todo/:id", func(c *gin.Context) {
})
// 修改
v1Group.PUT("/todo/:id", func(c *gin.Context) {
id, ok := c.Params.Get("id")
// 先查询 后修改
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "id不存在"})
return
}
var todo Todo
if err := DB.Where("id=?", id).First(&todo).Error; err != nil {
c.JSON(http.StatusOK, gin.H{
"error": err.Error()})
return
}
c.BindJSON(&todo)
if err := DB.Save(&todo).Error; err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK, todo)
}
})
// 删除
v1Group.DELETE("/todo/:id", func(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "id不存在"})
return
}
if err := DB.Where("id=?", id).Delete(Todo{}).Error; err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK, gin.H{id: "deleted"})
}
})
}
r.Run(":9090") // 默认监听并在 127.0.0.1:8080 上启动服务
}
Go语言完整tolist小项目crud【Gin+Gorm】
最新推荐文章于 2024-04-24 00:51:19 发布