Go 언어를 열심히 배워봤습니다~ gorm의 ORM 사용~
14105 단어 Go
입문
안녕하세요.나는 모 학교에서 프로그래밍 등을 배우는 서버 분야의 프로그래머다.
이번에는 오랜만에 Go의 기사입니다.이번 주제는'gorm'이다.
'gorm'이 뭐예요?나는 사용 방법 등을 총결하고 싶다.
그럼 바로 합시다.
gorm이 뭐예요?
GO 언어를 위한 ORM 프레임워크입니다.
데이터베이스 주위의 처리를 실시할 때 이 프레임워크를 사용하면 매우 편리하다.
GO 언어를 위한 ORM 프레임워크입니다.
데이터베이스 주위의 처리를 실시할 때 이 프레임워크를 사용하면 매우 편리하다.
http://doc.gorm.io/
과연 ORM은 무엇일까요?
Object-Realational-Mapping의 줄임말로 일본어에서 대상 관계 맵이라고 합니다.구체적으로 말하면 대상 프로그램과 관계 데이터베이스를 연결하는 역할을 한다.
나는 ORM을 사용하면 RDB를 더욱 직관적으로 조작할 수 있다고 생각한다.
실천 (표 정의)
※ 이번에는 users 테이블을 제작합니다.
models/user.goimport "github.com/jinzhu/gorm"
type User struct {
gorm.Model
Name string
Sex uint64
Age uint64
}
여기에 나타난 gorm.Model
은gorm이 준비한 모형이다.
다음 내용
model.gopackage gorm
import "time"
// Model base model definition, including fields `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`, which could be embedded in your models
// type User struct {
// gorm.Model
// }
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql:"index"`
}
컨트롤러
controllers/gorm.goimport (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var DB *gorm.DB
func InitDB() {
db, err := gorm.Open("mysql", getConnectionString())
if err != nil {
panic(err)
}
db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8 auto_increment=1")
db.DB()
db.AutoMigrate(&models.User{})
DB = db
}
func getConnectionString() string {
host := getParamString("db.host", "localhost(ホスト名)")
port := getParamString("db.port", "3306(ポート番号)")
user := getParamString("db.user", "データベース名")
pass := getParamString("db.password", "パスワード")
dbname := getParamString("db.name", "ユーザー名")
protocol := getParamString("db.protocol", "tcp")
dbargs := getParamString("dbargs", " ")
timezone := getParamString("db.timezone", "parseTime=true&loc=Asia%2FTokyo")
if strings.Trim(dbargs, " ") != "" {
dbargs = "?" + dbargs
} else {
dbargs = ""
}
return fmt.Sprintf("%s:%s@%s([%s]:%s)/%s%s?%s", user, pass, protocol, host, port, dbname, dbargs, timezone)
}
마이그레이션을 실행할 때 테이블이 없을 때 자동으로 생성될 때 아무것도 하지 않습니다db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8 auto_increment=1")
db.DB()
db.AutoMigrate(&models.User{})
DB = db
실행 (데이터 작업)
갱신과
INSERT
controllers/DataAccess.gouser := &models.User{
Name: "ワタタク",
Sex: "男",
Age: 22,
}
DB.Create(&user)
UPDATE
controllers/DataAccess.goidint := 対象ID
user := &models.User{
Name: "###",
Sex: 000,
Age: 000,
}
DB.First(&user, idint)
user.Name = "###"
user.Sex = 000
user.Age = 000
DB.Save(&user)
DELETE
controllers/DataAccess.goid := 対象ID
user := []models.User{}
DB.Delete(&user, id)
참고계
여러 개
controllers/DataAccess.gousers := []models.User{}
DB.Find(&users)
/*
*where句
*/
DB.Find(&user, "age=?", "", 22)
//このようにすることで、年齢が22才のレコードを抽出してくれる。配列の1つ1つにuserの1レコードが格納されているはずです。
단수
controllers/DataAccess.gousers := []models.User{}
models.Id = 12
db.First(&users)
/*
*もしくはwhere句っぽく
*/
db.First(&user, "name=?", "test")
기본적으로 구조 정보를 바탕으로 표를 참조하여 매개 변수에 전달되는 구조 정보를 채우거나 삭제합니다.
이 예에서users표의 id는 12개의 기록을 끌어올렸다.id는 메인 키 (위 그림) 이기 때문에 지정하면 id가 12인 기록을 얻을 수 있습니다.user를 출력하면 id는 12개의 기록된 정보로 채워져야 합니다.즉, 사용자는 하나의 기록을 대표한다.처음에 지정한 것은 ID뿐만 아니라 기록을 확정할 수 있는 정보를 제공하면 된다.
DB.First와 다른 것은 매개 변수의 변수가 그룹이라는 것이다. 이것은 조건을 지정하는 방법이다.여러 개의 늘어진 기록을 저장하기 위해 수조의 형식으로 실례화된 구조.그리고 방금 정보를 기록하는 것을 직접 지정했는데 이번에는 DB입니다.찾기 매개변수에 조건을 지정합니다.중요한 것은where 자구와 같다.따라서 여러 조건에서 지정할 때 다음과 같다.
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
Reference
이 문제에 관하여(Go 언어를 열심히 배워봤습니다~ gorm의 ORM 사용~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/watataku8911/items/6d79ef25163a6353ef96
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
※ 이번에는 users 테이블을 제작합니다.
models/user.go
import "github.com/jinzhu/gorm"
type User struct {
gorm.Model
Name string
Sex uint64
Age uint64
}
여기에 나타난 gorm.Model
은gorm이 준비한 모형이다.다음 내용
model.go
package gorm
import "time"
// Model base model definition, including fields `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`, which could be embedded in your models
// type User struct {
// gorm.Model
// }
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql:"index"`
}
컨트롤러
controllers/gorm.goimport (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var DB *gorm.DB
func InitDB() {
db, err := gorm.Open("mysql", getConnectionString())
if err != nil {
panic(err)
}
db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8 auto_increment=1")
db.DB()
db.AutoMigrate(&models.User{})
DB = db
}
func getConnectionString() string {
host := getParamString("db.host", "localhost(ホスト名)")
port := getParamString("db.port", "3306(ポート番号)")
user := getParamString("db.user", "データベース名")
pass := getParamString("db.password", "パスワード")
dbname := getParamString("db.name", "ユーザー名")
protocol := getParamString("db.protocol", "tcp")
dbargs := getParamString("dbargs", " ")
timezone := getParamString("db.timezone", "parseTime=true&loc=Asia%2FTokyo")
if strings.Trim(dbargs, " ") != "" {
dbargs = "?" + dbargs
} else {
dbargs = ""
}
return fmt.Sprintf("%s:%s@%s([%s]:%s)/%s%s?%s", user, pass, protocol, host, port, dbname, dbargs, timezone)
}
마이그레이션을 실행할 때 테이블이 없을 때 자동으로 생성될 때 아무것도 하지 않습니다db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8 auto_increment=1")
db.DB()
db.AutoMigrate(&models.User{})
DB = db
실행 (데이터 작업)
갱신과
INSERT
controllers/DataAccess.gouser := &models.User{
Name: "ワタタク",
Sex: "男",
Age: 22,
}
DB.Create(&user)
UPDATE
controllers/DataAccess.goidint := 対象ID
user := &models.User{
Name: "###",
Sex: 000,
Age: 000,
}
DB.First(&user, idint)
user.Name = "###"
user.Sex = 000
user.Age = 000
DB.Save(&user)
DELETE
controllers/DataAccess.goid := 対象ID
user := []models.User{}
DB.Delete(&user, id)
참고계
여러 개
controllers/DataAccess.gousers := []models.User{}
DB.Find(&users)
/*
*where句
*/
DB.Find(&user, "age=?", "", 22)
//このようにすることで、年齢が22才のレコードを抽出してくれる。配列の1つ1つにuserの1レコードが格納されているはずです。
단수
controllers/DataAccess.gousers := []models.User{}
models.Id = 12
db.First(&users)
/*
*もしくはwhere句っぽく
*/
db.First(&user, "name=?", "test")
기본적으로 구조 정보를 바탕으로 표를 참조하여 매개 변수에 전달되는 구조 정보를 채우거나 삭제합니다.
이 예에서users표의 id는 12개의 기록을 끌어올렸다.id는 메인 키 (위 그림) 이기 때문에 지정하면 id가 12인 기록을 얻을 수 있습니다.user를 출력하면 id는 12개의 기록된 정보로 채워져야 합니다.즉, 사용자는 하나의 기록을 대표한다.처음에 지정한 것은 ID뿐만 아니라 기록을 확정할 수 있는 정보를 제공하면 된다.
DB.First와 다른 것은 매개 변수의 변수가 그룹이라는 것이다. 이것은 조건을 지정하는 방법이다.여러 개의 늘어진 기록을 저장하기 위해 수조의 형식으로 실례화된 구조.그리고 방금 정보를 기록하는 것을 직접 지정했는데 이번에는 DB입니다.찾기 매개변수에 조건을 지정합니다.중요한 것은where 자구와 같다.따라서 여러 조건에서 지정할 때 다음과 같다.
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
Reference
이 문제에 관하여(Go 언어를 열심히 배워봤습니다~ gorm의 ORM 사용~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/watataku8911/items/6d79ef25163a6353ef96
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var DB *gorm.DB
func InitDB() {
db, err := gorm.Open("mysql", getConnectionString())
if err != nil {
panic(err)
}
db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8 auto_increment=1")
db.DB()
db.AutoMigrate(&models.User{})
DB = db
}
func getConnectionString() string {
host := getParamString("db.host", "localhost(ホスト名)")
port := getParamString("db.port", "3306(ポート番号)")
user := getParamString("db.user", "データベース名")
pass := getParamString("db.password", "パスワード")
dbname := getParamString("db.name", "ユーザー名")
protocol := getParamString("db.protocol", "tcp")
dbargs := getParamString("dbargs", " ")
timezone := getParamString("db.timezone", "parseTime=true&loc=Asia%2FTokyo")
if strings.Trim(dbargs, " ") != "" {
dbargs = "?" + dbargs
} else {
dbargs = ""
}
return fmt.Sprintf("%s:%s@%s([%s]:%s)/%s%s?%s", user, pass, protocol, host, port, dbname, dbargs, timezone)
}
db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8 auto_increment=1")
db.DB()
db.AutoMigrate(&models.User{})
DB = db
갱신과
INSERT
controllers/DataAccess.go
user := &models.User{
Name: "ワタタク",
Sex: "男",
Age: 22,
}
DB.Create(&user)
UPDATE
controllers/DataAccess.go
idint := 対象ID
user := &models.User{
Name: "###",
Sex: 000,
Age: 000,
}
DB.First(&user, idint)
user.Name = "###"
user.Sex = 000
user.Age = 000
DB.Save(&user)
DELETE
controllers/DataAccess.go
id := 対象ID
user := []models.User{}
DB.Delete(&user, id)
참고계
여러 개
controllers/DataAccess.go
users := []models.User{}
DB.Find(&users)
/*
*where句
*/
DB.Find(&user, "age=?", "", 22)
//このようにすることで、年齢が22才のレコードを抽出してくれる。配列の1つ1つにuserの1レコードが格納されているはずです。
단수
controllers/DataAccess.go
users := []models.User{}
models.Id = 12
db.First(&users)
/*
*もしくはwhere句っぽく
*/
db.First(&user, "name=?", "test")
기본적으로 구조 정보를 바탕으로 표를 참조하여 매개 변수에 전달되는 구조 정보를 채우거나 삭제합니다.이 예에서users표의 id는 12개의 기록을 끌어올렸다.id는 메인 키 (위 그림) 이기 때문에 지정하면 id가 12인 기록을 얻을 수 있습니다.user를 출력하면 id는 12개의 기록된 정보로 채워져야 합니다.즉, 사용자는 하나의 기록을 대표한다.처음에 지정한 것은 ID뿐만 아니라 기록을 확정할 수 있는 정보를 제공하면 된다.
DB.First와 다른 것은 매개 변수의 변수가 그룹이라는 것이다. 이것은 조건을 지정하는 방법이다.여러 개의 늘어진 기록을 저장하기 위해 수조의 형식으로 실례화된 구조.그리고 방금 정보를 기록하는 것을 직접 지정했는데 이번에는 DB입니다.찾기 매개변수에 조건을 지정합니다.중요한 것은where 자구와 같다.따라서 여러 조건에서 지정할 때 다음과 같다.
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
Reference
이 문제에 관하여(Go 언어를 열심히 배워봤습니다~ gorm의 ORM 사용~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/watataku8911/items/6d79ef25163a6353ef96텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)