这个数据库的定义蛮全的,先作个记录。

  1. package main
  2.  
  3. import (
  4. "time"
  5.  
  6. "github.com/jinzhu/gorm"
  7. _ "github.com/jinzhu/gorm/dialects/mysql"
  8. )
  9.  
  10. type User struct {
  11. gorm.Model
  12. Birthday time.Time
  13. Age int
  14. Name string `gorm:"size:255"` // string默认长度为255, 使用这种tag重设。
  15. Num int `gorm:"AUTO_INCREMENT"` // 自增
  16.  
  17. CreditCard CreditCard // One-To-One (拥有一个 - CreditCard表的UserID作外键)
  18. Emails []Email // One-To-Many (拥有多个 - Email表的UserID作外键)
  19.  
  20. BillingAddress Address // One-To-One (属于 - 本表的BillingAddressID作外键)
  21. //BillingAddressID sql.NullInt64
  22.  
  23. ShippingAddress Address // One-To-One (属于 - 本表的ShippingAddressID作外键)
  24. ShippingAddressID int
  25.  
  26. IgnoreMe int `gorm:"-"` // 忽略这个字段
  27. Languages []Language `gorm:"many2many:user_languages;"` // Many-To-Many , 'user_languages'是连接表
  28. }
  29.  
  30. type Email struct {
  31. ID int
  32. UserID int `gorm:"index"` // 外键 (属于), tag `index`是为该列创建索引
  33. Email string `gorm:"type:varchar(100);unique_index"` // `type`设置sql类型, `unique_index` 为该列设置唯一索引
  34. Subscribed bool
  35. }
  36.  
  37. type Address struct {
  38. ID int
  39. Address1 string `gorm:"not null;unique"` // 设置字段为非空并唯一
  40. Address2 string `gorm:"type:varchar(100);unique"`
  41. //Post sql.NullString `gorm:"not null"`
  42. }
  43.  
  44. type Language struct {
  45. ID int
  46. Name string `gorm:"index:idx_name_code"` // 创建索引并命名,如果找到其他相同名称的索引则创建组合索引
  47. Code string `gorm:"index:idx_name_code"` // `unique_index` also works
  48. }
  49.  
  50. type CreditCard struct {
  51. gorm.Model
  52. UserID uint
  53. Number string
  54. }
  55.  
  56. func main() {
  57. db, err := gorm.Open("mysql", "root:password@(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local")
  58. if err != nil {
  59. panic(err)
  60. }
  61. db.DB().SetMaxIdleConns(10)
  62. db.DB().SetMaxOpenConns(100)
  63. db.SingularTable(true)
  64. defer db.Close()
  65.  
  66. // 自动迁移模式
  67. db.AutoMigrate(&User{}, &Email{}, &Address{}, &Language{}, &CreditCard{})
  68. /*
  69. db.Create(&Product{Code: "L1212", Price: 1000})
  70.  
  71. // 读取
  72. var product Product
  73. db.First(&product, 1) // 查询id为1的product
  74. db.First(&product, "code = ?", "L1212") // 查询code为l1212的product
  75.  
  76. // 更新 - 更新product的price为2000
  77. db.Model(&product).Update("Price", 2000)
  78.  
  79. // 删除 - 删除product
  80. db.Delete(&product)
  81.  
  82. tx := db.Begin()
  83. r1 := db.DropTable(&Address{})
  84. r2 := db.DropTableIfExists(&CreditCard{})
  85. if r1.Error != nil || r2.Error != nil {
  86. tx.Rollback()
  87. return
  88. }
  89. tx.Commit()
  90. */
  91. }

  

gorm操练记录的更多相关文章

  1. gorm创建记录

    1.  简单创建记录 user := User{Name: "李四", Age: 88, Birthday: time.Now()} ret := db.Create(&u ...

  2. gorm创建记录及设置字段默认值

    package main import ( "database/sql" "gorm.io/driver/mysql" "gorm.io/gorm&q ...

  3. gorm 更新数据时,0值会被忽略

    原文: https://www.tizi365.com/archives/22.html ------------------------------------------------------- ...

  4. PhalGo-介绍

    PhalGo-介绍 phalgo是一个Go语言的一体化开发框架,主要用于API开发应为使用ECHO框架作为http服务web程序一样可以使用,牛顿曾经说过"如果我比别人看得远,那是因为我站在 ...

  5. Grails 对象关联映射 (GORM) 一

    转自:http://justjavac.iteye.com/blog/701445 Domain 类是任何商业应用的核心. 他们保存事务处理的状态,也处理预期的行为. 他们通过关联联系在一起, one ...

  6. gorm的日志模块源码解析

    gorm的日志模块源码解析 如何让gorm的日志按照我的格式进行输出 这个问题是<如何为gorm日志加traceId>之后,一个群里的朋友问我的.如何让gorm的sql日志不打印到控制台, ...

  7. Go项目中beego的orm使用和gorm的使用

    按照beego官方文档练习ORM的使用,model创建完始终没找到办法创建表,于是使用gorm翻译文档和官方文档进行了练习,使用起来还是比较简单. 安装: 方法一:Terminal打开,go get ...

  8. 【EF6学习笔记】(二)操练 CRUD 增删改查

    本篇原文链接: Implementing Basic CRUD Functionality 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整:并且根 ...

  9. Gorm使用详解

    1.什么是Gorm go语言编写的orm框架 特点: 1)全功能ORM 2)关联(包含一个,包含多个,属于,多对多) 3)Callbacks(创建/保存/更新/删除/查找前后回调) 4)预加载 5)事 ...

随机推荐

  1. 【软件工具】easyExcel简明使用指南

    easyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不发的话可能还行,但是一旦并发上来 ...

  2. JavaScript-----3.变量

    1.变量的使用 变量在使用的时候分两步:1. 声明变量 2. 赋值 1.1声明变量 //声明变量 var age;//声明一个名字为age的变量 var是JS的一个关键字,用于声明变量,使用该关键字声 ...

  3. 如何解决jpa 要求column 名称单词必须用下划线

    [转]:http://www.jeesns.cn/article/detail/6657 先引出轮子http://blog.csdn.net/54powerman/article/details/76 ...

  4. Logos讲解--逆向开发

    前言 Logos是CydiaSubstruct框架中提供的一组宏定义.利于开发者使用宏进行Hook操作,其语法简单,功能是非常强大且稳定. 详细内容logos语法为http://iphonedevwi ...

  5. mysql那些事(1)手机号与座机号码如何存储

    创建mysql数据表的时候,经常会遇到手机号码和座机号码数据的存储问题. 先说手机号码:很多人喜欢使用数字来进行存储,手机号不涉及到运算,并且有时候要带括号,加号之类的字符,有时候还要以0开头.所以, ...

  6. 如何把图片变得炫酷多彩,Python教你这样实现!

    有趣的图片 如何能让图片变得好玩?首先需要让它动起来!可如果是多张图片,我们还可以将其拼接起来组成gif动图,可一张图怎么玩?记得之前写过一个小练习,把一张图片拆分成九宫格的分片图.那么,能否由此下手 ...

  7. su和sudo的区别与使用

    一.   使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beina ...

  8. hibernate查询方式(四)

    ---恢复内容开始--- 1.mysql中的多表联合查询 ****/*内连接查询*/  只显示两个表有关联的记录 //第一种 SELECT * FROM Class c ,Student s WHER ...

  9. iOS apns推送

    前言:推送分为本地推送以及远程推送. 两者的区别为本地推送一般为定时推送.定期推送或者位置推送.而远程推送更为多样化,能满足较高的要求.当然远程推送需要服务器端开发,开发流程较复杂. 1.本地推送只需 ...

  10. iOS全局处理键盘事件

    转自:http://www.cnblogs.com/xinus/archive/2013/01/22/ios-keybord-notification.html 注册监听键盘事件的通知 [[NSNot ...