本文概览:类似java的mybatis,golang的mysql框架是GORM。

1 介绍

1.1 约定

GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间。

 

1、表名映射。蛇形复数
实现 Tabler 接口来更改默认表名,例如:
GORM 定义一个 gorm.Model 结构体,其包括段 ID、CreatedAt、UpdatedAt、DeletedAt

2 使用Demo

准备

1、第三方依赖

第一个:核心库

第二个:mysql驱动

2、数据模型

 

2.1 数据库连接和数据库连接池

1. 数据库连接
问题1:如果出现”: Scan error on column index 4, name “create_time”: unsupported Scan, storing driver.Value type []uint8 into type *time.Time“
解决:添加”?parseTime=true to the db mapper. Like this:”

2、数据库连接池配置

1

 

2.2 数据连接和mysql新增

2.2.1 新增一列

2.2.2 批量新增

使用切片进行批量插入

 

2.3 insert ignore

Clause Options
GORM defined Many Clauses, and some clauses provide advanced options can be used for your application
Although most of them are rarely used, if you find GORM public API can’t match your requirements, may be good to check them out, for example:

2.3 查询

2.3.1 查询一个元素

查询结果为
Find VS First区别
  • 如果使用First,差不到时候会返回gorm.ErrRecordNotFound。
  • 如果是Find,则不会返回任何错误。
Find VS Scan 区别
  • find返回数据是数据库Entity。
  • scan可以支持映射成非Entity的struct对象。比如

2.3.2 查询一个list

返回结果

2.4 更新

2.4.1 根据entity进行更新

获取一个entity,然后根据entity的主键进行更新。分为更新单个列和多个列两种情况

2.4.2 根据自定义where条件进行更新

直接拼接where条件进行更新。分为单个列和多个列情况

3 悲观锁

4 事务

4.1 db.Transaction

4.1.1单事务

使用db.Transaction函数来执行事务的相关操作。

4.1.2 嵌套事务

嵌套子事务回滚,不影响其他事务。但是大事务就回滚了,大事务回滚,所有子事务都要回滚。

 

4.2 手动

举例如下

4.3 保存点

参考

https://www.jianshu.com/p/9b906b62b2cc

分类&标签