Go语言学习之路(十)gorm框架准备工作

文章目录

    • 前言
    • 数据类型
    • 建表
    • 引入依赖
    • 新建modle(也就是我们的实体entity)
    • 查询
      • 1、连接数据库
      • 2、开始查询

前言

已经学习了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)
}

这样一个简单的查询就可以了,后续在再进行复杂的条件查询吧

你可能感兴趣的:(go学习,mysql,golang,学习,android)