golang学习整合gin和grom框架步骤
1、主main
【1】启动的时候进行加载数据库连接
【2】进行相关gin的操作,并调用总路由
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql" //需要引入mysql驱动包,不然会报错
)
/**
【1】新建项目后需要先下载包go get github.com/jinzhu/gorm
【2】需要多引入一个驱动包,直接忽略,不引入程序提示没驱动_ "github.com/jinzhu/gorm/dialects/mysql"
*/
/**
验证打开数据库操作
*/
func main() {
//打开数据库连接
//root:123456是用户名和密码
//@tcp(192.168.11.189:3306)是数据库服务器的IP和端口
//lztest是自己创建的数据库名称,记得编码格式是utf-8
//charset=utf8是设置编码格式
//&parseTime=True 对时间的处理时区设置,与本地时区保持一致
//&loc=Local 对时区的设置
db, err := gorm.Open("mysql", "root:123456@tcp(192.168.11.189:3306)/mytest?charset=utf8&parseTime=True&loc=Local")
//panic当出现错误的时候下面的代码都不需要执行
if err != nil {
panic(err)
}
//开启控制台打印sql执行语句
db.LogMode(true)
fmt.Println("打开数据库成功")
//释放资源
//defer是在使用结束后才释放
defer db.Close()
}
2、数据库连接
【1】数据库连接通过init方法进行加载
注意:
需要将数据库连接返回的内容放置到全局变量中。方便业务逻辑处理函数调用
package dbope
import (
"fmt"
"github.com/jinzhu/gorm"
//加载mysql驱动,
//如果要链接其他数据库,需要相应数据库的驱动
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var Db *gorm.DB
var Err error
// init在函数执行之前进行操作
func init() {
//创建数据库连接
/*
//注意在全局变量中进行定义的此处直接赋值。查了半天的错误
github.com/jinzhu/gorm.(*DB).Unscoped(...)
//(*DB).Unscoped(...)数据库提示未编码
*/
//Db, Err = gorm.Open("mysql", "root:123456@tcp(192.168.11.189:3306)/lztest?charset=utf8&parseTime=True&loc=Local")
Db, Err = gorm.Open("mysql", "root:123456@tcp(192.168.3.64:3306)/mytest?charset=utf8&parseTime=True&loc=Local")
//如果数据库连接失败了下面的代码就不在执行了
if Err != nil {
panic(Err)
}
//开启数据库打印日志
Db.LogMode(true)
fmt.Println("我的数据库连接成功了")
fmt.Println(Db)
}
3、总路由
【1】总路由根据业务模块分组,并调用各业务模块路由
package Router
import (
"GORM_Demo04/part11/Router/User"
"github.com/gin-gonic/gin"
)
/*
*总路由
*/
func Adj_Router(r *gin.Engine) {
//划分模块路由
//用户模块路由组
u := r.Group("/user") //用户的模块
//调用用户模块路由组
User.Router(u)
}
4、模块路由
【1】业务模块路由进行处理请求地址,并调用请求处理函数
package User
import "github.com/gin-gonic/gin"
func Router(g *gin.RouterGroup) {
//POST提交调用"/okuser"路由处理
g.POST("/okuser", SubmitUser)
}
5、请求处理函数
【1】请求响应函数获取请求参数,并跟局请求方式进行响应相关信息到客户端
package User
import (
"GORM_Demo04/part11/dbope"
"GORM_Demo04/part11/pojo"
"fmt"
"github.com/gin-gonic/gin"
)
/**
*处理的业务逻辑
*/
func SubmitUser(context *gin.Context) {
//获取表单提交数据
uname := context.PostForm("uname")
password := context.PostForm("password")
fmt.Println(uname + "---------" + password)
user := pojo.User{
UName: uname,
Password: password,
}
fmt.Println(user)
defer dbope.Db.Close()
//判断数据表是否存在
flog := dbope.Db.HasTable(&pojo.User{})
//不存在进行创建
if flog == false {
dbope.Db.CreateTable(&pojo.User{})
}
//向数据库表中添加数据
dbope.Db.Create(&user)
context.HTML(200, "demo01/user.html", gin.H{
"user": user,
})
}
6、用户实例
package pojo
type User struct {
UName string
Password string
}
7、HTML文件
1、index.html
{{define "demo01/index.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
这是我的index的界面
<form action="/user/okuser" method="post">
用户名: <input type="text" name ="uname" ><br>
密 码: <input type="password" name ="password" ><br>
<input type="submit" value ="提交">
</form>
</body>
</html>
{{end}}
2、user.html
{{define "demo01/user.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{.}}
你好我是user.html
</body>
</html>
{{end}}
访问localhost:8080,表单提交数据即可创建表并插入数据