前言
已经学习了go原生的对数据库的增删查改方式,但是会有很多代码量,导致阅读性可能不会很高,所以,我们需要用一些别人已经封装好的框架,对数据库进行操作,可以减少很多的代码量,就比如gorm
数据类型
这里列举一些比较常见的数据类型对应关系
go数据类型 | mysql数据类型 |
---|---|
string | varchar/text |
[]byte | bit |
bool | bool |
float32/float64 | double/decimal |
time.Time | datetime |
int类型 | int/bigint/tinyint |
注意
- java中可以将bit(1)直接用boolean接收,但是go中只能使用byte数组接收
- 时间拿出来是带有时区的,记得自己转换
建表
一般来说,我们是不用使用程序直接建表,而是直接使用sql进行创建
create table hb_user
(
id bigint unsigned not null auto_increment primary key comment '主键',
mobile varchar(15) comment '手机号',
nickname varchar(32) comment '昵称',
username varchar(32) comment '用户名',
password varchar(100) comment '密码',
# 这里建议使用bool,而不是bit(1),因为不好转换
enabled bool default true comment '逻辑删除',
created_at datetime default current_timestamp comment '创建时间',
updated_at datetime default current_timestamp on update current_timestamp comment '修改时间',
deleted_at datetime null
) engine = InnoDB
character set = utf8mb4
auto_increment = 1
comment '平台用户';
新建一个用户表并且创建,表名为hb_user
引入依赖
需要引入的依赖有两个
- mysql的驱动
- gorm框架
注意!!这是go.mod里面的
require (
gorm.io/driver/mysql v1.5.2
gorm.io/gorm v1.25.5
)
新建modle(也就是我们的实体entity)
package modle
import (
"time"
)
// 这个后续会用现在暂时用不上
var Modles = []interface{}{
&User{},
}
// 重写表名
type Tabler interface {
TableName() string
}
// 指定user实体的表名为hb_user
func (User) TableName() string {
return "hb_user"
}
type Model struct {
Id int64 `gorm:"primaryKey;autoIncrement" json:"id" form:"id"` // 主键id,自增类型,json序列化字段为id
Enabled bool `gorm:"type:bool;not null" json:"enabled" form:"enabled"` // 用户状态,默认为true
CreatedAt time.Time `gorm:"autoCreateTime" json:"createdAt" form:"createTime"` // 创建时间,使用创建时间填充
UpdatedAt time.Time `gorm:"autoUpdateTime:milli" json:"updatedAt" form:"updateTime"` // 更新时间,默认更新时使用当前毫秒填充
}
type User struct {
Model
Username string `gorm:"size:32;unique;" json:"username" form:"username"` // 用户名
Nickname string `gorm:"size:16;" json:"nickname" form:"nickname"` // 昵称
Password string `gorm:"size:512" json:"password" form:"password"` // 密码
}
实体就创建好了
注意点
- 字段一定是大写开头,否则会被忽略掉
查询
1、连接数据库
//定义连接信息,用户名、密码、通信协议等信息
url := "root:@tcp(localhost:3306)/hb_shop?charset=utf8&parseTime=True&loc=Local"
//连接数据库,连接数据库时,可以加上一些高级配置,就是gorm.Config中的参数
db, err := gorm.Open(mysql.Open(url), &gorm.Config{})
if err != nil {
fmt.Println("连接失败")
return
}
2、开始查询
var user modle.User
db.First(&user)
fmt.Println(user)
再贴上完整代码
package main
import (
"dbconnect/modle"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
//定义连接信息,用户名、密码、通信协议等信息
url := "root:@tcp(localhost:3306)/hb_shop?charset=utf8&parseTime=True&loc=Local"
//连接数据库,连接数据库时,可以加上一些高级配置,就是gorm.Config中的参数
db, err := gorm.Open(mysql.Open(url), &gorm.Config{})
if err != nil {
fmt.Println("连接失败")
return
}
var user modle.User
db.First(&user)
fmt.Println(user)
}
这样一个简单的查询就可以了,后续在再进行复杂的条件查询吧