本人使用了gin+gorm+mysql,使用RESTful快速开发,由于本人在接触go语言之前是学java web开发的,所以使用go语言进行web后端开发就有些java代码规范的影子,见谅。
这篇文章并不会对gorm的详细操作进行讲解,只是记录我在使用gorm实现增删改查的大概过程
首先要进行增删改查操作肯定要有数据库,这次就使用student下的department表
在entity包下创建department的实体
package entity
type Department struct {
DeptId int `json:"deptId"`
DeptName string `json:"deptName"`
}
func (Department) TableName() string {
return "department"
}
安装mysql驱动,会顺带着把gor驱动也安装上
go get -u gorm.io/driver/mysql
go get -u gorm.io/gorm
配置数据库连接,使用gorm.Open()方法,获得DB类型实例,用于后面的数据库读写操作
1.创建连接
创建方法与database/sql的Open方法基本一致,需要指明驱动类型
var db *gorm.DB
func main() {
dsn := "root:root@tcp(127.0.0.1:3306)/student?charset=utf8"
conn, err := gorm.Open("mysql",dsn)
if err != nil {
panic(err)
}
defer conn.Close()
db = conn
}
有了前面的铺垫,下面就可以执行真正写数据库操作了。
我们要对department表进行如下实现
- 查询全部数据GetAll()
- 按部门id查询GetById()
- 增添部门AddDept()
- 修改部门信息UpdateDeptInfo()
- 按id删除部门DeleteUserById()
全局变量 var db *gorm.DB
查询全部数据使用DB.Find()方法,传入department切片类型的地址
单条查询用First()方法即可, sql语句会在最后添加order by id limit 1
gorm库默认不会自动返回新插入记录的id,需要我们自己额外处理。
我们想获取刚插入数据的自增Id,本质上是通过sql语句:SELECT LAST_INSERT_ID() 获取上一条插入语句的自增id
那么gorm新增记录后获取自增id的步骤如下:
- 使用db.Create插入记录
- 执行sql语句SELECT LAST_INSERT_ID(),获取Id
插入使用Create()方法,注意需要传入指针,因为hooks的方法等绑定在指针上
修改部门信息
dept := &Department{}
err := context.ShouldBindJSON(&dept)
if err != nil {
context.JSON(200, "err")
return
}
affected := DB.Model(&Department{}).Where("dept_id=?", dept.DeptId).Updates(dept).RowsAffected
context.JSON(200, affected)
根据Where条件删除数据
用法:db.Where(条件表达式).Delete(空模型变量指针)
提示:这里Delete函数需要传递一个空的模型变量指针,主要用于获取模型变量绑定的表名。 不能传递一个非空的模型变量,否则就变成删除指定的模型数据,自动在where语句加上类似id = 2这样的主键约束条件。
我们使用Apifox对我们的写的五个接口进行测试
五个接口的运行一切正常,因此我们实现了对department表的简单的增删改查。