gORM操作MySQL的实现


当前第2页 返回上一页

Find(&user): 获取 user 表中的所有数据。

var stu []Student  // 改为切片
GlobalConn.Select("name, age").Find(&stu)   // Find() 查询多条

相当于SQL:select name, age from student;

where 子句使用

select name, age from student where name = 'lisi';
GlobalConn.Select("name, age").Where("name = ?", "lisi").Find(&stu)

select name, age from student where name = 'lisi' and age = 22;
//方法1:
GlobalConn.Select("name, age").Where("name = ?", "lisi").
   Where("age = ?", 22).Find(&stu)
//方法2:
GlobalConn.Select("name, age").Where("name = ? and age = ?", "lisi", 22).Find(&stu)

gorm 更新数据

Save(): 根据主键更新。如果数据没有指定主键,不更新,变为 “插入”操作。

func UpdateData()  {
    var stu Student
    stu.Name = "wangwu"
    stu.Age = 99 // 没有指定 id -- 没有主键! --- 插入
    fmt.Println(GlobalConn.Save(&stu).Error)
}
func UpdateData()  {
    var stu Student
    stu.Name = "wangwu"
    stu.Age = 77
    stu.Id = 4  //指定 id -- 更新操作!
    fmt.Println(GlobalConn.Save(&stu).Error)
}

Update(): 更新一个字段。

fmt.Println(GlobalConn.Model(new(Student)).Where("name = ?", "zhaoliu").
            Update("name", "lisi").Error)
// Model(new(Student): 指定更新 “student” 表

Updates(): 更新多个字段。

fmt.Println(GlobalConn.Model(new(Student)).Where("name = ?", "lisi").
            Updates(map[string]interface{}{"name":"liuqi", "age":24}).Error)

grom 删除数据

删除:物理删除。真正的执行 Delete。

软删除:逻辑删除。不真正删。不执行Delete。

  • 创建表时,在表中添加一个 “删除字段” 。当需要删除时,更新 “删除字段”, 更新为true
  • 查询时,不查询 “删除字段” 为 null 的值。

创建表:

// 创建全局结构体
type Student struct {
      gorm.Model // go语言中, 匿名成员 --- 继承! Student 继承 Model
      Name string
      Age int
}
// 在“Model”上,Ctrl-B 跳转至 Model 类定义。
type Model struct {
      ID        uint `gorm:"primary_key"`
      CreatedAt time.Time
      UpdatedAt time.Time
      DeletedAt *time.Time `sql:"index"`
}
// Model 表由 mysql自动维护,不需要我们手动维护。

执行软删除:

// 使用 Delete() 参数,指定要删除的数据所在表的表名。
fmt.Println(GlobalConn.Where("name = ?", "lisi").Delete(new(Student)).Error)

验证:

select * from student;  依然能看到 “lisi” 相关数据。 但是 。delete_at 字段。被填入数据。

在 gorm 框架中,执行 查询语句:

func SearchData()  {
    var stu []Student
 GlobalConn.Find(&stu)
 fmt.Println(stu)
}

--- 查询结果为: [ ]  ---- "软删除" 成功!

想查询“软删除”的数据:

GlobalConn.Unscoped().Find(&stu)

想 实现 “物理删除”
--- 借助 Unscoped() 执行删除。

GlobalConn.Unscoped().Where("name = ?", "lisi").Delete(new(Student))

gorm 设置表属性

修改表字段大小

// 创建全局结构体
type Student struct {
 Id    int
        // string -- varchar。 默认大小255. 可以在创建表时,指定大小。
 Name  string `gorm:"size:100;default:'xiaoming'"`
 Age   int
 Class int    `gorm:"not null"`
}

结论:修改表属性,只能在第一次建表的时候,有效!或者给表增加新字段的时候,有效!其他场景,修改表属性 ,在 gorm 操作中,无效!

设置时间

默认MySQL数据库 有 3 种时间:

  • date:
  • datetime:
  • timeStamp:时间戳。 ——  gorm 中,只有 timeStamp

如果必须使用 MySQL 数据库特有的 “数据类型”, 使用 “type” 关键字来设置。

// 创建全局结构体
type Student struct {
 Id    int
 Name  string    `gorm:"size:100;default:'xiaoming'"`
 Age   int
 Class int       `gorm:"not null"`
 Join  time.Time `gorm:"type:timestamp"`// 创建 Student 表指定 timestamp类型。
}

到此这篇关于gORM操作MySQL的实现的文章就介绍到这了,更多相关gORM操作MySQL内容请搜索

更多Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

mysql中关于正则表达式查询的使用方法介绍

mysql忘记密码了怎么解决

mysql exists用法小结

mysql中char和varchar数据类型的区别是什么

mysql数据库超时设置配置的方法实例

mysql隔离级别有几种

mysql中where与on的区别及何时使用详析

mysql数据表中字段的数据类型有哪些?

mysql存储过程中游标如何遍历

如何查看mysql的用户名和密码

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...