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'; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码