zoukankan      html  css  js  c++  java
  • Gorm与数据库(单复数)表结构之间的映射

    Gorm连接MySQL:

    import (
       _ "github.com/go-sql-driver/mysql"
       "github.com/jinzhu/gorm"
    )
    
    type User struct {
       Id   int    `json:"id"`
       Name string `json:"name"`
       Age  int    `json:"age"`
    }
    
    func GormTest() {
       dsn := username + ":" + password + "@tcp(" + addr + ")/" + datebase + "?charset=utf8&parseTime=true&loc=Local"
       var err error
       DB, err := gorm.Open("mysql", dsn)
       if err != nil {
          panic("MySQL conn failed:" + err.Error())
       }
       //DB.SingularTable(true)
    }
    

    数据库有复数表结构:

    数据库有复数表结构users,代码中定义user或users结构体,均能操作:

    DB.Create(&User{Name: "Li", Age: 5}) //成功
    DB.Create(&Users{Name: "Li", Age: 5}) //成功
    

    数据库有单数表结构:

    数据库有单数表结构user,代码中定义user或users结构体,均不能操作:

    DB.Create(&User{Name: "Li", Age: 5}) //Table 'test.users' doesn't exist
    DB.Create(&Users{Name: "Li", Age: 5}) //Table 'test.users' doesn't exist
    

    解决数据库单数表结构问题:

    获取数据库连接时,增加一条配置:

    DB.SingularTable(true)
    

    此时,代码结构体单复数和数据库表名单复数必须对应,单对单,复对复:

    DB.Create(&User{Name: "Li", Age: 5}) //成功
    DB.Create(&Users{Name: "Li", Age: 5}) //Table 'test.users' doesn't exist
    

    通过代码创建数据库表结构:

    不加SingularTable配置,通过代码创建表,不管结构体是单数复数,生成的表都为复数:

     DB.AutoMigrate(&User{}) //生成users
     DB.AutoMigrate(&Students{}) //生成students
    

    加SingularTable配置,通过代码创建表,结构体单数生成单数表,结构体复数生成复数表:

     DB.AutoMigrate(&User{}) //生成user
     DB.AutoMigrate(&Students{}) //生成students
    

    公众号:李田路口

  • 相关阅读:
    JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP
    mysql存储过程批量插入数据
    mysql 5.7.12 winx64安装配置方法图文教程
    mysql-5.7.12-winx64 安装
    spring下载地址
    jdbc动态切换数据库
    Tomcat7 新的数据库连接池Tomcat jdbc pool介绍和配置
    WebSercice Demo
    面试问题之数据结构与算法:最小生成树算法
    面试问题之数据结构与算法:最大连续子序列和
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12129923.html
Copyright © 2011-2022 走看看