Go 언어를 열심히 배워봤습니다~ gorm의 ORM 사용~

14105 단어 Go

입문


안녕하세요.나는 모 학교에서 프로그래밍 등을 배우는 서버 분야의 프로그래머다.
이번에는 오랜만에 Go의 기사입니다.이번 주제는'gorm'이다.
'gorm'이 뭐예요?나는 사용 방법 등을 총결하고 싶다.
그럼 바로 합시다.

gorm이 뭐예요?


GO 언어를 위한 ORM 프레임워크입니다.
데이터베이스 주위의 처리를 실시할 때 이 프레임워크를 사용하면 매우 편리하다.
  • 공식 홈페이지:
    http://doc.gorm.io/
  • 과연 ORM은 무엇일까요?


    Object-Realational-Mapping의 줄임말로 일본어에서 대상 관계 맵이라고 합니다.구체적으로 말하면 대상 프로그램과 관계 데이터베이스를 연결하는 역할을 한다.
    나는 ORM을 사용하면 RDB를 더욱 직관적으로 조작할 수 있다고 생각한다.

    실천 (표 정의)


    ※ 이번에는 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.go
    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 자구와 같다.따라서 여러 조건에서 지정할 때 다음과 같다.
    이상
    무슨 잘못이 있으면 연락 주세요.
    끝까지 읽어줘서 고마워요.

    좋은 웹페이지 즐겨찾기