Gin投票系统(2)

投票系统

数据库的建立

先分析需求,在sql中建立数据库,关于项目数据库如何建立可以在"goweb项目创建流程分析中看如何去建表"

成功后目前有四个表:

vote,user,vote_opt,vote_opt_user

建立数据库,可以使用网上的sql转gorm网站,把建表语句直接转换成结构体,

放在model下的model.go文件下,作为全部数据库存放处

go 复制代码
package model

import "database/sql"

//这里存放各种gorm建表语句

type VoteOptUser struct {
    Id         sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`
    UserId     sql.NullInt64  `gorm:"column:user_id"`
    VoteId     sql.NullInt64  `gorm:"column:vote_id"`
    VoteOptId  sql.NullInt64  `gorm:"column:vote_opt_id"`
    CreateTime sql.NullString `gorm:"column:create_time"`
    UpdateTime sql.NullString `gorm:"column:update_time"`
}

func (v *VoteOptUser) TableName() string {
    return "vote_opt_user"
}

type VoteOpt struct {
    Id          sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`
    Name        sql.NullString `gorm:"column:name"`
    VoteId      sql.NullInt64  `gorm:"column:vote_id"`
    Count       sql.NullInt32  `gorm:"column:count"`
    CreatedTime sql.NullString `gorm:"column:created_time"`
    UpdateTime  sql.NullString `gorm:"column:update_time"`
}

func (v *VoteOpt) TableName() string {
    return "vote_opt"
}

type Vote struct {
    Id          sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`
    Title       sql.NullString `gorm:"column:title"`
    Type        sql.NullInt32  `gorm:"column:type;comment:'0是单选1是多选'"`
    Status      sql.NullInt32  `gorm:"column:status;comment:'0开放1超时'"`
    Time        sql.NullInt64  `gorm:"column:time;comment:'有效时长'"`
    UserId      sql.NullInt64  `gorm:"column:user_id;comment:'创建人是谁'"`
    CreatedTime sql.NullString `gorm:"column:created_time;comment:'创建时间'"`
    UpdatedTime sql.NullString `gorm:"column:updated_time;comment:'更新时间'"`
}

func (v *Vote) TableName() string {
    return "vote"
}

type User struct {
    Id          sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`
    Name        sql.NullString `gorm:"column:name"`
    Password    sql.NullString `gorm:"column:password"`
    CreatedTime sql.NullString `gorm:"column:created_time"`
    UpdateTime  sql.NullString `gorm:"column:update_time"`
}

func (u *User) TableName() string {
    return "user"
}

建立完成,可以先测试是否成功

测试:

在model中建立:vote,model_test文件,测试数据库是否连接成功,能否查出数据

go 复制代码
//model_text测试文件:
package model
import (
    "fmt"
    "testing"
)
func TestGetVotes(t *testing.T) { //该方法测试vote是否生效
    NewMysql() //连接数据库
    //测试用例
    r := GetVotes() //查询方法
    fmt.Printf("ret:%+v", r)
    //%+v 是一个格式化占位符,表示以"扩展"格式输出变量的值。对于结构体(struct)类型的变量,%+v 会输出字段名和字段值。
    //和%v区别:通用的格式化占位符,根据变量的实际类型进行格式化输出。对于结构体,它会输出字段的值,但不会包括字段名。
    Close()
}
go 复制代码
//vote文件:其实和user文件中方法基本一致,都是封装查表方法
package model

import "fmt"

func GetVotes() []Vote { //该方法会输出Vote切片类型的值
    //封装查询方法,查询投票项目的详情
    ret := make([]Vote, 0) //定义ret为切片类型,0表示长度为0,内部存放具体值为vote类型
    err := Conn.Table("vote").Find(&ret).Error
    if err != nil {
       fmt.Printf("err:%s", err.Error())
    }
    return ret
}

当在vote中加入数据:

再在test方法中测试:输出

(后边没截完)

因为ret是切片类型,所以能同时查多条记录,测试完成,可以写逻辑层和router层代码啦!!!

将所有表名展示到网页上

首先先试试把vote的Title展示到页面上:

将index.tmpl代码改为:

html 复制代码
写模板文件
<!doctype html>
<html lang="en">
<head>
    <title>香香编程-投票项目</title>
</head>
<body>
<main>
    {{range $key,$value := .vote}}
        <h2>{{$value.Title}}</h2>
    {{/*        用模板写出只要所有ret的title*/}}
    {{end}}
</main>
</body>
</html>

逻辑层下

go 复制代码
func Index(context *gin.Context) {
    ret := model.GetVotes()
    context.HTML(http.StatusOK, "index.tmpl", gin.H{"vote": ret})
}
加载模板文件,传入的.表示ret,即整个查到的vote数据

效果展示:

数据库

一个简单的投票表名展示就做好了,

按照这个思路,我们可以设置点击表名,查看每个表的具体数据

相关推荐
群联云防护小杜1 分钟前
服务器压力测试怎么做
运维·服务器·网络协议·tcp/ip·阿里云·压力测试
水w36 分钟前
【项目实践】SpringBoot Nacos配置管理 map数据
java·服务器·开发语言·spring boot·nacos
火龙kess40 分钟前
使用FreeNAS软件部署ISCSI的SAN架构存储(IP-SAN)练习题
linux·运维·服务器·网络·windows·tcp/ip·架构
云空1 小时前
《Qt Creator 4.11.1 教程》
数据库·qt
rkmhr_sef1 小时前
frp内网穿透云服务器。云服务器映射多个家庭局域网内网端口。家庭Windows主机内网运行多个web程序
服务器·前端·windows
麦子爱种地1 小时前
前端学习DAY26(华为平板页面)
服务器·前端·javascript
云计算DevOps-韩老师1 小时前
【网络云计算】2024第52周-每日【2024/12/23】小测-理论&实操-解析
linux·运维·服务器·开发语言·网络·云计算·perl
shine_du1 小时前
架构师之路--达梦数据库学习计划
数据库·达梦数据库·dameng
潇潇和多客开源1 小时前
数据库的数据被清除了,该如何恢复?
数据库·oracle
胖头鱼的鱼缸(尹海文)1 小时前
数据库管理-第274期 Oracle Enterprise Manager 24ai新特性一览(20241223)
数据库·oracle