GROM
23128 단어 Go
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 필드를 데이터베이스에서 직접 삭제하는 것이 아니라 현재 시간으로 설정합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Golang과 DB를 연결하여 주가 데이터를 그래프로 표시합니다.진화 제작된 프로그램. 지난번에 한 품종에 집중되어 데이터를 보였는데, 이번에는 텍스트 상자에 입력한 품종 코드를 바탕으로 나는 도표를 표시하는 기능을 만들고 싶다. html에서 텍스트 상자와 단추를 준비하세요. w...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.