ITPub博客

首页 > 应用开发 > > go语言编程web应用之数据库应用

go语言编程web应用之数据库应用

作者:youou 时间:2019-11-12 15:25:34 0 删除 编辑

1,先看下model文件夹下的g.go文件,这是链接数据库文件,这里导入了gorm,如果没有这个可以用

go get github.com/jinzhu/gorm获取一下

package model

import (
 "github.com/jinzhu/gorm"
 _ "github.com/jinzhu/gorm/dialects/mysql"
)

var db *gorm.DB

func SetDB(database *gorm.DB) {
 db = database
}
func ConnectToDB() *gorm.DB{
 db, err := gorm.Open("mysql", "root:@/fenlei?charset=utf8&parseTime=True&loc=Local")
 if err != nil {
 panic("Failed to connect database")
 }
 db.SingularTable(true)
 return db
}

ConnectToDB函数就是连接了数据库,如果不太清楚gorm的用法可以看一下官方文档。

2,然后看一下model文件夹下的user.go文件

package model

import "fmt"

type User struct {
 ID int `gorm:"primary_key"`
 Username string `gorm:"type:varchar(64)"`
 Email string `gorm:"type:varchar(120)"`
 PasswordHash string `gorm:"type:varchar(128)"`
 Posts []Post
 Followers []*User `gorm:"many2many:follower;association_jointable_foreignkey:follower_id"`
}

func (u *User) SetPassword(password string) {
 u.PasswordHash = GeneratePassword(password)
}
func GetUserByUsername(username string) User{
 var user User
 fmt.Println(db)
 db.Where("username=?", username).Find(&user)
 return user
}

这里定义user结构体,写了两个函数,通过用户名获取用户和设置用户密码

3.medel/utils.go的GeneratePassword函数

package model

import (
 "crypto/md5"
 "encoding/hex"
)

func GeneratePassword(pwd string) string{
 hasher :=md5.New()
 hasher.Write([]byte(pwd))
 pwdHash :=hex.EncodeToString(hasher.Sum(nil))
 return pwdHash
}

生成密码

4.model/post.go帖子的文件

package model

import "time"

type Post struct {
 ID int `gorm:"primary_key"`
 UserID int
 User User
 Body string `gorm:"type:varchar(180)"`
 Timestamp *time.Time `sql:"DEFAULT:current_timestamp"`
}

func GetPostsByUserID(id int) (*[]Post, error) {
 var posts []Post
 if err := db.Preload("User").Where("user_id=?", id).Find(&posts).Error; err != nil {
 return nil, err
 }
 return &posts, nil
}

GetPostsByUserID通过用户id获取到用户发的帖,这样model文件夹的文件建立好了,基本是定义了一些数据文件结构和通用查询方法。


5,改造一下vm/index.go文件


import (
 "model"
)

type IndexViewModel struct {
 BaseViewModel
 model.User
 Posts []model.Post
}

// IndexViewModelOp struct
type IndexViewModelOp struct{}

// GetVM func
func (IndexViewModelOp) GetVM() IndexViewModel {
 u1:=model.GetUserByUsername("rene")

 posts,_:=model.GetPostsByUserID(u1.ID)
 v := IndexViewModel{BaseViewModel{Title: "Homepage"}, u1,*posts}
 return v
}


GetVM方法之前是写死的数据,现在调用数据库的数据。

这样运行index.go,打开浏览器,就可以看到运行效果了。


来源:php程序媛

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4729/viewspace-3140522/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    294
  • 访问量
    13383