这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
本文承接上文,此处记录Gorm的修改,删除与原生SQL的某些用法
项目结构添加如下,只需要main下额外添加一个文件即可
m2代码如下
package main
import (
"Gorm1/model"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func conn() *gorm.DB {
dsn := "root:root@tcp(localhost:3306)/userLogin"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("Connection ERROR!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
return nil
}
return db
}
func main() {
var db *gorm.DB = conn()
//Save更新
/**
var user1 model.Users
db.Debug().Where("userName", nil).First(&user1)
user1.UserPassword = "NULL"
//查询不到则会插入新数据
// UPDATE `users` SET `userName`='',`userPassword`='NULL',`createAt`='0000-00-00 00:00:00' WHERE `userId` = 18
db.Debug().Save(&user1)
*/
//var user2 model.Users
//update更新
/**
//无对应数据时则不会插入
// UPDATE `users` SET `userName`='ffff' WHERE `userPassword` = 'fffff'
db.Debug().Model(&user2).Where("userPassword", "fffff").Update("userName", "ffff")
var user1 model.Users = model.Users{}
//UPDATE `users` SET `userPassword`='ttttt' WHERE `userName` = 'ttt'
db.Debug().Model(&user1).Where("userName", "ttt").Update("userPassword", "ttttt")
*/
//updates更新多列
//更新多个,gorm文档与我实际不同,因为我没指定主键
// gorm文档没加where条件,我不加where条件则sql语句是 UPDATE `users` SET `userName`='XXXX',`userPassword`='XXXX'报错
// UPDATE `users` SET `userName`='first2',`userPassword`='second' WHERE `UserName` = 'first'
//有返回值result,可以读取操作的数目
/**
db.Debug().Model(&user2).Where("UserName", "first2").Updates(&model.Users{
UserName: "first",
UserPassword: "first",
CreatedAt: time.Time{},
})
*/
/**
//delete删除
user2.ID = 49
user2.UserName = "first2"
// DELETE FROM `users` WHERE `users`.`userId` = 48
//也可以加where条件
db.Debug().Delete(&user2)
*/
//原生SQL
//原生SQL好用很多,简单的API加上原生SQL即可实现很多功能
var user2 []model.Users
//var user3 []model.Users
//Select * from `users` where userName='first'
//只拿来查询
db.Debug().Raw("Select * from `users` where userName=?", "first").Scan(&user2)
fmt.Println(user2)
result := db.Debug().Exec("Update `users` set userPassword=? where userName=?", "aaaaa", "aaaa")
fmt.Println(result.RowsAffected)
//Rows的遍历
var userName, userPassword string
row, err := db.Debug().Raw("Select userName,userPassword from `users` where userName=?", "aaaa").Rows()
if err != nil {
fmt.Println("ERROR>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
fmt.Println(err)
return
}
//推迟row的关闭
defer row.Close()
for row.Next() {
row.Scan(&userName, &userPassword)
fmt.Println(userName)
}
row.Close()
//Row的遍历,只有第一项
row2 := db.Debug().Raw("Select userName,userPassword from `users` where userName=?", "aaaa").Row()
row2.Scan(&userName, &userPassword)
fmt.Println(userName)
}
原生SQL是万能的,功能覆盖广阔
回头研究下连接池