gorm基础之连接MySQL数据库

1、导入相关包

1
2
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

2、连接Mysql数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//配置MySQL连接参数
//username := "root"  //账号
//password := "123456" //密码
//host := "127.0.0.1" //数据库地址,可以是Ip或者域名
//port := 3306 //数据库端口
//Dbname := "tizi365" //数据库名
//timeout := "10s" //连接超时,10秒
func ConnDB(username,password,host string,port int,Dbname,timeout string)*gorm.DB{
    //拼接下dsn参数, dsn格式可以参考上面的语法,这里使用Sprintf动态拼接dsn参数,因为一般数据库连接参数,我们都是保存在配置文件里面,需要从配置文件加载参数,然后拼接dsn。
    dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
    //连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
    _db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("连接数据库失败, error=" + err.Error())
    }
    return _db
}

3、迁移表

1
2
3
4
5
6
7
8
9
type User struct {
    Group int   `gorm:"primarykey"`
    Location int
    Level int
    Phone string
    Password string
}
 
db.AutoMigrate(&User{})

  注意:迁移的结构体的字段首字母要大写。

4、CRUD操作

增加

1
2
3
4
user:=User{1,2}
db.Create(&user) // 通过数据的指针来创建
db.Select("Name", "Age", "CreatedAt").Create(&user)//创建记录并更新给出的字段
db.Omit("Name", "Age", "CreatedAt").Create(&user)//创建记录并更新未给出的字段

批量插入

1
2
users:=[]User{{10,2},{3,4},{5,6}}
db.Create(&users)j

查询

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
// 获取第一条记录(主键升序)
db.First(&user)
// SELECT * FROM users ORDER BY id LIMIT 1;
 
// 获取一条记录,没有指定排序字段
db.Take(&user)
// SELECT * FROM users LIMIT 1;
 
// 获取最后一条记录(主键降序)
db.Last(&user)
// SELECT * FROM users ORDER BY id DESC LIMIT 1;
db.First(&user, 10)
// SELECT * FROM users WHERE id = 10;
 
db.First(&user, "10")
// SELECT * FROM users WHERE id = 10;
 
db.Find(&users, []int{1,2,3})
// SELECT * FROM users WHERE id IN (1,2,3);
 
// 获取全部记录
result := db.Find(&users)
// SELECT * FROM users;
 
// 获取第一条匹配的记录
db.Where("name = ?", "jinzhu").First(&user)
// SELECT * FROM users WHERE name = 'jinzhu' ORDER BY id LIMIT 1;
 
// 获取全部匹配的记录
db.Where("name <> ?", "jinzhu").Find(&users)
// SELECT * FROM users WHERE name <> 'jinzhu';
 
// IN
db.Where("name IN ?", []string{"jinzhu", "jinzhu 2"}).Find(&users)
// SELECT * FROM users WHERE name IN ('jinzhu','jinzhu 2');
 
// LIKE
db.Where("name LIKE ?", "%jin%").Find(&users)
// SELECT * FROM users WHERE name LIKE '%jin%';
 
// AND
db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users)
// SELECT * FROM users WHERE name = 'jinzhu' AND age >= 22;
 
// Time
db.Where("updated_at > ?", lastWeek).Find(&users)
// SELECT * FROM users WHERE updated_at > '2000-01-01 00:00:00';
 
// BETWEEN
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)
// SELECT * FROM users WHERE created_at BETWEEN '2000-01-01 00:00:00' AND '2000-01-08 00:00:00';

 

posted @   ☞@_@  阅读(294)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示