Skip to content

Commit 713233e

Browse files
committedDec 24, 2020
gorm demo
1 parent 3d41894 commit 713233e

File tree

7 files changed

+186
-65
lines changed

7 files changed

+186
-65
lines changed
 

‎gorm/db/db.go

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package db
2+
3+
import (
4+
"github.com/jinzhu/gorm"
5+
"sync"
6+
)
7+
8+
9+
var (
10+
db *gorm.DB
11+
once sync.Once
12+
)
13+
14+
// 连接数据库
15+
func DB() *gorm.DB{
16+
once.Do(func() {
17+
d, err := gorm.Open("mysql", "root:root@/test?charset=utf8&parseTime=True&loc=Local")
18+
if err != nil {
19+
panic(err)
20+
}
21+
d.LogMode(true)
22+
db = d
23+
})
24+
return db
25+
}

‎gorm/models/school.go

-25
This file was deleted.

‎gorm/models/user.go

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package models
2+
3+
import (
4+
"github.com/jinzhu/gorm"
5+
)
6+
7+
type User struct {
8+
gorm.Model
9+
Name string
10+
UserAddress []*UserAddress `gorm:"ForeignKey:user_id"`
11+
}
12+
13+
func (User) TableName() string {
14+
return "user"
15+
}
16+
17+
type UserAddress struct {
18+
gorm.Model
19+
UserId int64
20+
Contacts string
21+
Tel string
22+
Address string
23+
}
24+
25+
func (UserAddress) TableName() string {
26+
return "user_address"
27+
}

‎gorm/school.go

-21
This file was deleted.

‎gorm/school_test.go

-19
This file was deleted.

‎gorm/user.go

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package gorm
2+
3+
import (
4+
"demo/gorm/db"
5+
"demo/gorm/models"
6+
"errors"
7+
_ "github.com/go-sql-driver/mysql"
8+
"github.com/jinzhu/gorm"
9+
)
10+
11+
type User struct {
12+
}
13+
14+
// 添加
15+
func (u *User) Add(user *models.User) (errs []error) {
16+
if errs = db.DB().Create(user).GetErrors(); len(errs) > 0 {
17+
return
18+
}
19+
return
20+
}
21+
22+
// GetById 根据 id 获取数据
23+
func (u *User) GetById(id int64, user *models.User) bool {
24+
if db.DB().First(&user, id).RecordNotFound() {
25+
return false
26+
}
27+
28+
return true
29+
}
30+
31+
// Update 修改数据
32+
func (u *User) Update(user *models.User) (errs []error) {
33+
// 先判断是否存在
34+
var old models.User
35+
if !u.GetById(int64(user.ID), &old) {
36+
errs = []error{errors.New("记录不存在")}
37+
return
38+
}
39+
// 修改
40+
if errs = db.DB().Model(&old).Save(user).GetErrors(); len(errs) > 0 {
41+
return
42+
}
43+
44+
return
45+
}
46+
47+
// Delete 删除 force:false|true 是否物理删除
48+
func (u *User) Delete(id int64, force bool) (errs []error) {
49+
// 先判断是否存在
50+
var old models.User
51+
if !u.GetById(id, &old) {
52+
errs = []error{errors.New("记录不存在")}
53+
return
54+
}
55+
d := db.DB()
56+
if force {
57+
// 物理删除
58+
d = d.Unscoped()
59+
}
60+
if errs = d.Delete(&old).GetErrors(); len(errs) > 0 {
61+
return
62+
}
63+
64+
return
65+
}
66+
67+
// List 列表
68+
func (u *User) List(param map[string]string) (userList []*models.User) {
69+
d := db.DB()
70+
if val, ok := param["name"]; ok && val != "" {
71+
d = d.Where("name like ?", "%" + val + "%")
72+
}
73+
d = d.Preload("UserAddress", func(db *gorm.DB)*gorm.DB {
74+
if val, ok := param["contacts"]; ok && val != "" {
75+
db = db.Where("contacts like ?", "%" + val + "%")
76+
}
77+
if val, ok := param["tel"]; ok && val != "" {
78+
db = db.Where("tel = ?", val)
79+
}
80+
return db
81+
}).Find(&userList)
82+
return
83+
}

‎gorm/user_test.go

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package gorm
2+
3+
import (
4+
"demo/gorm/models"
5+
"encoding/json"
6+
"testing"
7+
)
8+
9+
func TestUser_Add(t *testing.T) {
10+
var user models.User
11+
user.Name = "Tom"
12+
var addressList []*models.UserAddress
13+
addressList = append(addressList, &models.UserAddress{Contacts: "Jesse", Tel: "15123123121", Address: "广州123"})
14+
addressList = append(addressList, &models.UserAddress{Contacts: "Jesse2", Tel: "18123123121", Address: "深圳123"})
15+
user.UserAddress = addressList
16+
errs := (*User)(nil).Add(&user)
17+
if len(errs) > 0 {
18+
t.Fatal(errs)
19+
}
20+
}
21+
22+
func TestUser_Update(t *testing.T) {
23+
var user models.User
24+
user.ID = 2
25+
user.Name = "Jack"
26+
//var addressList []*models.UserAddress
27+
//addressList = append(addressList, &models.UserAddress{Model: gorm.Model{ID: 1},Contacts: "Jesse11", Tel: "15123123121", Address: "广州123"})
28+
//addressList = append(addressList, &models.UserAddress{Contacts: "Jesse2", Tel: "18123123121", Address: "深圳123"})
29+
//user.UserAddress = addressList
30+
errs := (*User)(nil).Update(&user)
31+
if len(errs) > 0 {
32+
t.Fatal(errs)
33+
}
34+
}
35+
36+
func TestUser_Delete(t *testing.T) {
37+
id := 3
38+
errs := (*User)(nil).Delete(int64(id), true)
39+
if len(errs) > 0 {
40+
t.Fatal(errs)
41+
}
42+
}
43+
44+
func TestUser_List(t *testing.T) {
45+
param := make(map[string]string)
46+
param["name"] = "to"
47+
param["contacts"] = "Jesse2"
48+
list := (*User)(nil).List(param)
49+
s, _ := json.Marshal(list)
50+
t.Log(string(s))
51+
}

0 commit comments

Comments
 (0)
Please sign in to comment.