go语言批量插入数据并且在页面展示

main.go

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"log"
	"os"
	"reflect"
	"strconv"
	"time"
)

/*
go在调用gorm将结构体对象转换成mysql对应的数据进行插入的时候,里面的动作实际是一下几点:
1. gorm插件调用create(&t)函数 从go的结构体变量t里面获取到对应的内存的值,并将t结构体指针对应的值进行转换成mysql的insert语句将结构体对象的值插入到mysql数据库对应的t结构体名字一致的表名里面;
2. mysql 根基gorm插件转换之后的sql语句对表进行数据插入操作;
3. gorm插件将mysql生成的字段值返回值结构体变量t指针对应的内存地址的值;
4. 此刻就能保证结构体t指针指向的内存地址的值与mysql对应生成的字段的值保持一致,且一一映射;
*/
/*Gorm框架在执行插入操作以后,会将数据库返回的生成值(如自增主键)更新到传入结构体的相应字段中。这个过程发生在应用层,而非数据库层,确保了go程序中的对象状态与数据库的一致性。
例如,如果你有一个结构体定义如下:
go
type User struct {
    ID   uint `gorm:"primary_key"`
    Name string
}
然后你创建一个新的User:
user := User{Name: "John"}
db.Create(&user)
在执行 db.Create(&user) 后,假设数据库生成的新纪录id为5,则Gorm会更新 user.ID 的值为5。这样,你就可以从你的Go程序中的 user 对象直接获取新插入记录的ID。
注意这个操作是【Gorm框架提供的功能】,它在【插入完成后】,【再次查询了数据库中的新纪录】,然后【把新纪录的值指定回 user 对象】。这样你可以确保 user 对象中的值与数据库中的记录是同步的。*/
type BaseModel struct {
	Id         int        `gorm:"paimarykey"`
	CreateTime *time.Time `gorm:"autoCreateTime"`
	UpdateTime *time.Time `gorm:"autoCreateTime"`
	Name       string     `gorm:"type:varchar(30);unique;not null"`
}

type Teachers struct {
	BaseModel
	Ton    int
	Pwd    string `gorm:"type:varchar(100);not null"`
	Tel    string `gorm:"type:char(11);"`
	Birth  *time.Time
	Remark string `gorm:"type:varchar(255);"`
}

type Students struct {
	BaseModel
	Sno    int
	Pwd    string `gorm:"type:varchar(100);not null"`
	Tel    string `gorm:"type:char(11);"`
	Gender byte   `gorm:"default:1;"`
	Brith  *time.Time
	Remark string `gorm:"type:varchar(255);"`
	//多对一
	ClassID int
	Class   Class `gorm:"foreigkey:ClassID"`
	//多对多
	Course []Course `gorm:"many2many:student2course;constraint:OnDelete:CASCADE;"`
}

type Course struct {
	BaseModel
	Credit    int
	Period    int
	TeacherID int
	Teacher   Teachers `gorm:"foreigkey:TeacherID"`
}

type Class struct {
	BaseModel
	Num     int
	TutorID int
	Tutor   Teachers `gorm:"foreigkey:TutorID"`
}

//构建函数体

// 数据库初始化
func DbInit() *gorm.DB {
	newLogger := logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
		logger.Config{
			//SlowThreshold: time.Second,   // 慢 SQL 阈值
			LogLevel: logger.Info, // Log level
		},
	)
	fmt.Println(reflect.TypeOf(newLogger))
	dsn := "root:1xxxx@tcp(xxx.xx.xx.xxx:3306)/coursess?charset=utf8mb4&parseTime=True&loc=Local"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: newLogger,
	})

	//调用gorm根据go语言的结构体去创建mysql一一对应的表
	//db.AutoMigrate(&Teachers{})
	//db.AutoMigrate(&Class{})
	//db.AutoMigrate(&Course{})
	//db.AutoMigrate(&Students{})
	db.Migrator().DropTable(&Teachers{}, &Class{}, &Course{}, &Students{})
	db.AutoMigrate(&Teachers{}, &Class{}, &Course{}, &Students{})
	return db
}

// 全局变量
var db *gorm.DB

func Stu(ctx *gin.Context) {
	//插入数据
	var Students []Teachers
	for i := 1; i <= 100; i++ {
		Student := Teachers{BaseModel: BaseModel{Name: "yuan" + strconv.Itoa(i)}, Ton: 1001 + i, Pwd: "123", Tel: "110" + strconv.Itoa(i)}
		Students = append(Students, Student)
	}
	//Teacher1 := Teachers{BaseModel: BaseModel{Name: "yuan"}, Ton: 1001, Pwd: "123", Tel: "110"}
	//Teacher2 := Teachers{BaseModel: BaseModel{Name: "elxa"}, Ton: 1002, Pwd: "234", Tel: "111"}

	//db.Create(&Student)
	db.Create(&Students)
	ctx.HTML(200, "student.html", gin.H{
		"name": Students,
	})
	fmt.Println(Students)
}
func main() {

	//数据库初始化
	db = DbInit()

	//构gin引擎
	r := gin.Default()

	//加载静态文件
	r.LoadHTMLGlob("template/*")
	//构建动态路由
	r.GET("/student", Stu)

	//运行go引擎
	r.Run(":8888")

}

publi.html


<!doctype html>
<html lang="zh-CN">
<head>
<!--    <meta charset="utf-8">-->
<!--    <meta http-equiv="X-UA-Compatible" content="IE=edge">-->
<!--    <meta name="viewport" content="width=device-width, initial-scale=1">-->
<!--    &lt;!&ndash; The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags &ndash;&gt;-->
<!--    <meta name="description" content="">-->
<!--    <meta name="author" content="">-->
<!--    <link rel="icon" href="../../favicon.ico">-->
<!--    <link rel="canonical" href="https://getbootstrap.com/docs/3.4/examples/theme/">-->

        {{block "title" .}}
        <title>学生管理系统 </title>
        {{end}}

    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">

    <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</head>

<body>
<nav class="navbar navbar-inverse">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">学生管理系统</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">学生选课系统</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li class="active"><a href="/student">学生管理</a></li>
                <li><a href="/course">课程管理</a></li>
                <li><a href="/class">班级管理</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" class="divider"></li>
                        <li class="dropdown-header">Nav header</li>
                        <li><a href="#">Separated link</a></li>
                        <li><a href="#">One more separated link</a></li>
                    </ul>
                </li>
            </ul>
        </div><!--/.nav-collapse -->
    </div>
</nav>
<div class="container-fluid theme-showcase" role="main">
    <div class="row">
        <div class="col-md-2">
            <div >
                <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
                    <div class="panel panel-default">
                        <div class="panel-heading" role="tab" id="headingOne">
                            <h4 class="panel-title">
                                <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
                                    学生管理
                                </a>
                            </h4>
                        </div>
                        <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
                            <div class="panel-body">
                                <a href="/student">学生管理</a>
                            </div>
                        </div>
                    </div>
                    <div class="panel panel-default">
                        <div class="panel-heading" role="tab" id="headingTwo">
                            <h4 class="panel-title">
                                <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
                                    课程管理
                                </a>
                            </h4>
                        </div>
                        <div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
                            <div class="panel-body">
                                <a href="/course">课程管理</a>
                            </div>
                        </div>
                    </div>
                    <div class="panel panel-default">
                        <div class="panel-heading" role="tab" id="headingThree">
                            <h4 class="panel-title">
                                <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
                                    班级管理
                                </a>
                            </h4>
                        </div>
                        <div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
                            <div class="panel-body">
                                <a href="/class">班级管理</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <!-- Fixed navbar -->
        </div>
        <div class="col-md-10">
            <!-- Main jumbotron for a primary marketing message or call to action -->
                {{block "content" .}}
                {{end}}
        </div>
    </div>

</div> <!-- /container -->

</body>
</html>

student.html

{{template "publi.html" .}}
{{define "content" }}
<h2>学生管理</h2>
<table class="table table-bordered text-center">
    <thead>
    <tr>
        <td>序号</td>
        <td>姓名</td>
        <td>ID</td>
        <td>电话号码</td>
    </tr>
    </thead>
    <tbody>
    {{ range $student:=.name}}
    <tr>
        <td>{{$student.Id}}</td>
        <td>{{$student.Name}}</td>
        <td>{{$student.Ton}}</td>
        <td>{{$student.Tel}}</td>
    </tr>
    {{end}}
    </tbody>
</table>
{{end}}

{{define "title" }}
<title>学生管理系统</title>
{{end}}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值