GROM

23128 단어 Go
1. ORM Object Relation Mapping 객체 관계 매핑 객체는 무엇입니까? 프로그램의 객체/인스턴스, 예를 들어 Go의 구조체 인스턴스 관계: 관계 데이터베이스: 예를 들어 Mysql 2,
type UserInfo struct{
     
ID uint
Name string
Gender string
Hobby string
}
func main(){
     
     u1 := UserInfo{
     1,"  "," ","  "}
     // u1       
      insert into userinfo values(1,"  ","  ");//SQL  
}

SQL 문 사용 안 함
type UserInfo struct{
     
ID uint
Name string
Gender string
Hobby string
}
func main(){
     
    u1 := UserInfo{
     1,"  "," ","  "}
// u1       
    orm.Create(&u1)//ORM  
}

3. ORM의 장단점: 장점: 개발 효율을 높이는 단점: 실행 성능을 희생하고 유연성을 희생하는 SQL 능력 약화 4. 데이터 테이블 구조체 데이터 줄 구조체 실례 필드 구조체 필드 5. GORM은 Go 언어로 작성된 ORM 프레임워크이다.그것은 문서가 완비되어 개발자에게 우호적이며 주류 데이터베이스 설치를 지원한다
go get -u github.com/jinzhu/gorm

6. 연결 데이터베이스(Mysql) 연결 데이터베이스에 대응하는 데이터를 부어야 하는 드라이버
import_ "github.com/jinzhu/gorm/dialects/mysql"

7. MySQL 연결
import(
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)

func main(){
     
db,err := gorm.Open("mysql","user:password@(localhost)/dbname?charset=utf8mb4&parseTime=True&loc=local")
defer db.Close()
}

8. GORM 작업 MySQL
package main

import(
	"github.com/jinzhu/gorm"
	_"github.com/jinzhu/gorm/dialects/mysql"
	"syscall"
)

type UseInfo struct{
     
	ID uint
	Name string
	Gender string
	Hobby string
}

func main(){
     
    //  mysql   
	db,err := gorm.Open("mysql","root:root1234@(127.0.0.1:13306)/db1=utf8mb4&parseTime=True&Local")
	if err != nil{
     
		panic(err)
	}
    defer db.Close()
	//         (            )
	db.AutoMigrote(&UserInfo{
     })
	//     
	u1 := UserInfo{
     1,"  "," ","  "}
	db.Create(&u1)
    //  
    var u UserInfo
	db.First(&u)//      u    
    fmt.Printf("u:%#v
"
,u) // db.Model(&u).Update("hobby"," ") // db.Delete(&u) }

9. GORM 모델 정의는 ORM 도구를 사용할 때 코드에서 모델(Models)을 정의하고 데이터베이스에 있는 데이터 테이블과 비추어야 한다. GORM에서 모델(Models)은 일반적으로 정상적으로 정의된 구조체, 기본적인 go 유형 또는 그들의 지침이다.sql도 지원합니다.Scanner 및 driver.Valuer 인터페이스(interfaces) gorm.모델들은 모델 정의를 편리하게 하기 위해 GORM에 gorm을 내장했다.모델 구조체.gorm.Model은 ID,CreatedAt,UpdatedAt,DeletedAt 네 필드를 포함하는 Golang 구조체이다
//gorm.Model   
type Model struct{
     
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}

너는 그것을 너의 모형에 끼워 넣을 수 있다. (구조체 끼워넣기)
// `ID`,`CreatedAt`,`UpdatedAt`,`DeletedAt`     `User`   
type User struct{
     
gorm.Model
Name string
}

물론 너도 완전히 스스로 모델을 정의할 수 있다
//   gorm.Model,      
type User struct{
     
ID int 
Name string
}

모델 정의 예
//    
type User struct{
     
gorm.Model//  gorm.Model
Name               string
Age                sql.NullInt64//    
Birthday           *time.Time
Email              string  `gorm:"type:varchar(100);unique_index"`
Role               string  `gorm:"size:255"`//       255
MemberNumber        *string  `gorm:"unique;not null"`//     (member number)       
Num                  int  `gorm:"AUTO_INCREMENT"`//  num     
Address              string  `gorm:"index:addr"`// address      addr   
IgnoreMe             int      `gorm:"—"`//     
}

구조체 태그(tags)가 구조체 선언 모델을 사용할 때 태그(tags)는 옵션입니다.gorm은 다음과 같은 태그를 지원합니다. 지원되는 구조체 태그(Struct tags) 구조체 태그(Tag) 설명 Column 지정 열 이름 Type 지정 열 데이터 유형 Size 지정 열 크기, 기본값 255 PRIMARYKEY 열을 기본 키 UNIQUE로 지정하고 열을 고유한 DEFAULT 지정열 기본값 PRECISION 지정열 정밀도 NOT NULL 비NULL AUTOINCREMENT는 열이 자체 증가 유형 INDEX에 대해 이름이 있거나 없는 색인을 만들지 여부를 지정하고 여러 색인이 같은 이름이면 복합 색인 UNIQUEINDEX는 INDEX와 유사하지만 고유한 인덱스인 EMBEDDED를 생성하여 구조를 내장 EMBEDDED 로 설정합니다.PREFIX 내장 구조의 접두어 설정
  •                              
    

  • 연관 연관 태그(tags) 구조체 태그(Tag) 설명 MANY2MANY 지정 연결 테이블 FOREIGNKEY 설정 외부 키 ASSOCIATIONFOREIGNKEY 설정 연관 키 POLYMORPHIC 지정 다중 유형 POLYMORPHICVALUE 다중값 지정 JOINTABLEFOREIGNKEY 지정 연결 테이블의 외부 키 ASSOCIATIONJOINTABLE_FOREIGNKEY 연결 테이블에 대한 연관된 외부 키 SAVE 지정ASSOCIATIONS가 save와 관련된 작업을 자동으로 완성할지 여부 ASSOCIATIONAUTOUPDATE가 업데이트와 관련된 작업을 자동으로 완성할지 여부 ASSOCIATIONAUTOCREATE가 create와 관련된 작업을 자동으로 완성할지 여부 ASSOCIATIONSAVE_REFERENCE가 인용된save와 관련된 조작을 자동으로 완성하는지 여부PRELOAD가 미리 불러오는 관련 조작을 자동으로 완성하는지 여부
    type User struct{
         
    ID  string//  `ID`            
    Name  string
    }
    //  `AnimalID`    
    type Animal struct{
         
    AnimalID int64  `gorm:"primary_key"`
    Name  string
    Age int64
    }
    

    테이블 이름(Table Name) 테이블 이름은 기본적으로 구조체의 복수입니다. 예를 들어,
    type User struct{
         }//     `users`
    // User      `profiles`
    func (User) TableName() string{
         
         return "profiles"
    } 
    func (u User) TableName() string{
         
    if u.Role == "admin"{
         
    return "admin_users"
    }else{
         
    return "users"
       }
    }
    //           ,     true, `User`      `user`
    db.SingularTable(true)
    

    테이블 이름을 Table()로 지정할 수도 있습니다.
    //  User       `deleted_users`  
    db.Table("deleted_users").CreateTable(&User{
         })
    
    var deleted_users []User
    db.Table("delete_users").Find(&deleted_users)
    //SELECT * FROM delete_users
    
    db.Table("deleted_users").Where("name = ?","jinzhu").Delete()
    ///DELETE FROM delete_users WHERE name = 'jinzhu'
    

    GORM은 기본 테이블 이름 규칙 변경도 지원합니다.
    gorm.DefaultTableNameHandler = func(db *gorm.DB,defaultTableName string) string{
         
    return "prefix_" + defaultTableName
    }
    

    열 이름(Column Name) 열 이름은 필드 이름을 밑줄로 분할하여 생성됩니다.
    type User struct{
         
    ID  uint                 //column name is `id`
    Name  string             //column name is `name`
    Birthday  time.Time      //column name is `birthday`
    CreatedAt  time.Time     //column name is `created_at`
    }
    

    구조체 tag를 사용하여 열 이름을 지정할 수 있습니다
    type Animal struct{
         
    AnimalId  int64    `gorm:"column:beast_id"`//set column name to `beast_id`
    Birthday  time.Time   `gorm:"column:day_of_the_beast"`
    Age  int64  `gorm:"column:age_of_the_beast"`
    }
    

    타임스탬프 추적CreatedAt 모델에 CreatedAt 필드가 있으면 이 필드의 값은 처음 기록을 만드는 시간입니다
    db.Create(&user)//`CreatedAt`       
    //    `update`     `CreatedAt`  
    db.Model(&user).Update("CreatedAt",time.Now())
    

    UpdatedAt 모델에 UpdateAt 필드가 있으면 이 필드의 값은 매번 기록을 업데이트하는 시간이 됩니다
    db.Save(&user)//`UpdatedAt`       
    
    db.Model(&user).Update("name","jinzhu")//`UpdatedAt`       
    

    DeletedAt 모델에 DeletedAt 필드가 있으면 Delete를 호출하여 기록을 삭제할 때 DeleteAt 필드를 데이터베이스에서 직접 삭제하는 것이 아니라 현재 시간으로 설정합니다

    좋은 웹페이지 즐겨찾기