课程总结
在gorm/RPC/gin中 gorm是三件套中负责连接数据库的有用框架,但前提是关系型数据库才能做映射,以下根据实例来学习基本操作和方法函数
控制数据库
使用gorm连接数据库需要先创建一个数据库实例以MySQL为例子,以下介绍create,delete,modify,update操作
以下User的表单作为通例
设计表单
gorm:"primaryKey"表示该字段为主键,
gorm:"unique"表示该字段的值唯一,
gorm:"default:0"表示该字段的默认值为0,
gorm:"autoCreateTime"表示自动创建
gorm:"autoUpdateTime"表示更新时间戳
连接数据库
type User struct {
gorm.Model
Username string `gorm:"unique"`
Password string
Profile UserProfile `gorm:"foreignKey:UserID"`
}
func main() {
User := os.Getenv("MYSQL_USER")
Pass := os.Getenv("MYSQL_PASSWORD")
Host := os.Getenv("MYSQL_HOST")
Port := os.Getenv("MYSQL_PORT")
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/mysql?charset=utf8mb4&parseTime=True&loc=Local", User, Pass, Host, Port)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
这里使用环境变量获取本机端口等等,1024运行示意如图,
此处也可以用如下方式获取参数
inputUser.Username = c.Query("username")
inputUser.Password = c.Query("password")
添加数据
也就是生成表单操作,我们使用Gorm自动生成的AutoMigrate方法,具体示例如下。
需要注意的是,表单操作完毕后采用defer stmt.Close()延迟关闭数据库链接,保证资源不泄露
AutoMigrate内填写需要自动迁移的结构体实例
db.AutoMigrate(&models.User{})
表单的删除
删除结构体实例即可,此处输出删除用户名字调用delete方法
var deleteUser
db.Where("name = ?", newUser.Name).First(&deletedUser).Delete(&deletedUser)
表单修改和查找
使用update和find方法,同理定义新变量modifieUser/foundUser,以便在后续的代码中使用modifiedUser变量名而不会与结构体实例重名输入对应条件操作
var modifiedUser User
db.Where("name = ?", "张三").First(&modifiedUser).Updates(User{Age: 20})
var foundUser User
db.Where("name = ?", "张三").First(&foundUser).Error // 根据条件查找名为“张三”的用户,并将其赋值给foundUser变量,然后输出查询结果
fmt.Println(foundUser) // 输出查询结果:{1 uint32 Name:"张三" Age:18}
这里复习下命令操纵数据库:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
);
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
SELECT column1, column2, ...
FROM table_name
WHERE condition;
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
DELETE FROM table_name
WHERE condition;
show tables
use <database>
select * from <database>
describe <datables>