Gin-gorm

定义一个Model

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package models

//结构定义
type User struct {
Id uint64 `gorm:"primary_key;commit:'用户ID'"`
Name string `gorm:"size:100;unique,not null;commit:'用户名'"`
Password string `gorm:"size:100;unique,not null;commit:'密码'"`
Phone string `gorm:"size:11;commit:'手机号'"`
Email string `gorm:"size:100;index;commit:'Email'"`
State int `gorm:"default:1;commit:'状态1正常0关闭'" `
Message string `gorm:"commit:'状态1正常0关闭'" `
}

//设置表名
func (u User) TableName() string {
return "user"
}
DB连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package models

import (
"fmt"
"gin/config"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
log "github.com/sirupsen/logrus"
)

var db *gorm.DB

func InitDb(conf config.Mysql, debug bool) {
if db!=nil {
return
}
dsn := fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", conf.User, conf.Passwd, conf.Host, conf.Port, conf.Db)
var err error
db, err = gorm.Open("mysql", dsn)

if err != nil {
log.Fatalf("can't connect to db : %s\n", err.Error())
}

err = db.DB().Ping()
if err != nil {
log.Fatalf("can't ping db :%s\n", err.Error())
}

log.Println("ping mysql success!")

db.DB().SetMaxOpenConns(conf.MaxIdleConns)
db.DB().SetMaxIdleConns(conf.MaxOpenConns)
if debug {
db.LogMode(true)
}
}

func GetDb() *gorm.DB {
return db
}

func Save(value interface{}) error {
return db.Save(&value).Error
}

func Create(values interface{}) (err error) {
err = db.Create(values).Error

return
}

func Update(values interface{}) error {
return db.Update(&values).Error
}

func Updates(model interface{}, updates interface{}) (affectedRows int64, err error) {
result := db.Where(model).Updates(updates)
affectedRows = result.RowsAffected
err = result.Error
log.Infof("Updates : affectedRows %d, err: %v", affectedRows, err)
return
}

自动创建表

1
models.GetDb().AutoMigrate(&models.User{},&models.Content{})

操作数据库增删改查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package libservers

import (
"fmt"
"gin/forms"
"gin/models"
"log"
)

type User struct {
Servers
}
//可定义成一个全局的处理结构
type Servers struct {
Id string
Name string
Pagesize int
Offset int
}
//获取分页的数据信息
func(u User) GetList() []models.User {
DB := models.GetDb()
var users []models.User
u.Name = fmt.Sprintf("%%%s%%",u.Name)
DB.Where("name like ?",u.Name).Limit(u.Pagesize).Offset(u.Offset).Order("id desc").Find(&users)
log.Println(users)
return users
}

//添加
func (u User) Add(form forms.User) (uint64, bool) {
DB := models.GetDb()
var user models.User
/**/
user.Name = form.Name
user.Password = form.Password
user.Email = form.Email
user.Phone = form.Phone
DB.Create(&user)
if user.Id == 0 {
return 0, false
}
return user.Id, true
}

/*
@查询一条数据
*/
func (u User) Show() (models.User, error) {
DB := models.GetDb()
var user models.User
//查主键
err := DB.First(&user, u.Id).Error
//其他条件
//DB.Where("name = ?",u.Name).First(&user)
if user.Id == 0 {
return user, err
}
return user, nil
}

/*
@删除一条数据
*/
func (u User) Del() bool {
DB := models.GetDb()
var user models.User
//判断是否存在
user, err := u.Show()
if err != nil {
return false
}
err = DB.Delete(&user).Error
if err != nil {
return false
}
return true
}

/*
@修改数据
*/
func (u User) Update(form forms.UpUser) error {
DB := models.GetDb()
var user models.User
user, err := u.Show()
if err != nil {
return err
}
user.Name = form.Name
user.Phone = form.Phone
user.Email = form.Email
user.Message = form.Message
err = DB.Model(&user).Update(&user).Error
if err != nil {
return err
}
return nil
}