01-连接和建表
@
1. 连接数据库
package main
import (
"database/sql"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"time"
)
func main() {
_,sqlDB,_ := connect()
sqlDB.Close()
}
func connect() (db *gorm.DB,sqlDB *sql.DB,err error) {
dsn := "root:40010355@tcp(127.0.0.1:3306)/crow?charset=utf8&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
sqlDB,_ = db.DB()
if err != nil {
fmt.Printf(err.Error())
defer sqlDB.Close()
}else {
fmt.Printf("OK\n")
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
}
return
}
2 创建表
2.1 创建模型
- 结构体名和表名相对应(关系见 2.3)
- 结构体成员和列名对应,如:LiuBei ---> liu_bei
type User struct {
ID int64
Age int64
Name string
}
2.2 创建表
可将 “1. 连接数据库” 的示例代码中main函数替换如下
func main() {
db,sqlDB,_ := connect()
defer sqlDB.Close()
db.Migrator().CreateTable(&User{})
}
- 生成表结构如下
mysql> desc users;
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| age | bigint(20) | YES | | NULL | |
| name | longtext | YES | | NULL | |
+-------+------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
2.3 模型和表名的对应关系
结构体 | 库名 |
---|---|
LiuBei | liu_beis |
Guan_Yu | guan_yu |
ZhangFei01 | zhang_fei01 |
说明:以驼峰定义结构体,库名会变成小写中间以”_”分割,结尾加“s”。如果以数字结尾则不会加"s"。 |
2.4 自定义表名
添加如下代码
func(User) TableName() string {
return "ha_ha"
}
之后生成库名为"ha_ha"