导入包
"gorm.io/gorm"
"gorm.io/driver/mysql"
连接
dsn := "root:root@tcp(127.0.0.1:3306)/car"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
使用连接池
// SetMaxIdleConns 设置空闲连接池中连接的最大数量
sqlDB.SetMaxIdleConns(10)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(100)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Hour)
表迁移
代码
db.AutoMigrate(&User{})
模型语句
type User struct {
Name string
Age int
Birthday time.Time
Address string
}
插入数据
user := User{
Name: "silk",
Age: 28,
Birthday: time.Now(),
Address: "suzhou",
}
db.Create(user)
指定插入字段以及指定忽略字段
user.Name = "java0904"
//指定字段插入
db.Debug().Select("Name", "Age").Create(&user)
user.Name = "xiaoyang"
//创建记录并更新未给出的字段
db.Debug().Omit("Address","Age").Create(&user)
通过使用Debug()
方法可以在控制台打印出在数据库执行的sql语句,打印语句如下
2021/04/08 16:28:48 /Users/java0904/goProject/gorm/demo01/main.go:51
[0.401ms] [rows:1] INSERT INTO `users` (`name`,`age`) VALUES ('java0904',28)
2021/04/08 16:28:48 /Users/java0904/goProject/gorm/demo01/main.go:56
[0.691ms] [rows:1] INSERT INTO `users` (`name`,`birthday`) VALUES ('xiaoyang','2021-04-08 16:28:48.796')
此时查看数据表信息
mysql> desc users;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| name | longtext | YES | | NULL | |
| age | bigint(20) | YES | | NULL | |
| birthday | datetime(3) | YES | | NULL | |
| address | longtext | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> select * from users;
+----------+------+-------------------------+---------+
| name | age | birthday | address |
+----------+------+-------------------------+---------+
| silk | 28 | 2021-04-08 08:28:48.797 | suzhou |
| java0904 | 28 | NULL | NULL |
| xiaoyang | NULL | 2021-04-08 08:28:48.797 | NULL |
+----------+------+-------------------------+---------+
3 rows in set (0.00 sec)
完整代码
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
"time"
)
import _ "github.com/go-sql-driver/mysql"
var DB *gorm.DB
type User struct {
Name string
Age int
Birthday time.Time
Address string
}
func main() {
dsn := "root:root@tcp(127.0.0.1:3306)/car"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
sqlDB, err := db.DB()
if err != nil {
log.Fatal(err)
}
//
// SetMaxIdleConns 设置空闲连接池中连接的最大数量
sqlDB.SetMaxIdleConns(10)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(100)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Hour)
//数据表迁移,新建一个表,默认表名会加上复数
db.AutoMigrate(&User{})
user := User{
Name: "silk",
Age: 28,
Birthday: time.Now(),
Address: "suzhou",
}
db.Create(user)
user.Name = "java0904"
//指定字段插入
db.Debug().Select("Name", "Age").Create(&user)
user.Name = "xiaoyang"
//创建记录并更新未给出的字段
db.Debug().Omit("Address", "Age").Create(&user)
}