上一节我们介绍了Gorm的连接和原理,这一节我们介绍一下数据库的相关CURD操作;
一般来说数据库的数据是有结构的,那么gorm定义了利用定义好的结构体配上相关说明来接收数据库中的每一条记录值。
这一节:创建和利用原生mysql进行数据增删改查
创建
结构体创建定义
type User struct {
ID uint
Name string
Email *string
Age uint8
Birthday *time.Time
MemberNumber sql.NullString
ActivedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time
}
结构体填充数据,并通过数据的指针来创建。
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
result := db.Create(&user) // 通过数据的指针来创建
此外,还有批量插入的办法,那就是声明一个该结构体的数组并通过数据的指针来创建。
var users = []User{{Name: "jinzhu1"}, {Name: "jinzhu2"}, {Name: "jinzhu3"}}
db.Create(&users)
利用原生mysql进行数据增删改查
如果有mysql基础并且掌握的很熟练,gorm提供了直接通过mysql语句完成增删改查的操作:
- 执行查询语句(使用db.Raw)
- 执行增删改语句(使用db.Exec)
查询:
db.Raw("select * from tsys_user where user_id > ?", userId).Scan(&userList)
有一点不同的是,gorm对于待查询的具体的值,比如这里的user_id可能传入的是1,等等,利用"?"来代替,并在后面依次传入该字段具体的值,语句中有几个问号,后面就要依次追加几个具体的变量值,并在后面利用Scan函数将查询到的结果存取到userList中,因为可能涉及到多组值,这里最好是数组的形式。
此外,还可以查询具体某一个字段或者获取所有字段的列名
sqlStr = strings.TrimSpace(sqlStr)
rows, err := db.DB().Query(sqlStr)
columns, _ := rows.Columns()
对于增删改等操作,可以利用Exec函数,使用方法很类似。 插入:
db.Exec("insert into tsys_user (comp_cd,user_cd,user_name,user_pwd,user_type,user_phone,user_email) values (?,?,?,?,?,?,?)",
compCd, userCd, userName, usePwd, userType, userPhone, userEmail)
删除:
db.Exec("delete from tsys_user where user_id in (?)", idSlice)
修改:
db.Exec("update tsys_user set add_user=? where user_id in (?) ", updMsg, idSlice)
需要注意的是,如果你的结构体的字段名称在数据库中不存在,会使用默认值,如果你不想这样,那就在select 返回值中加入你想要映射的字段,比如数据库中字段名称是 userID ,而结构体用的是ID, 则可以用select useiID as ID...from...where... 返回数据