go 언어 orm 프레임 워 크--xorm

24971 단어 go.
sql 작업 데이터베이스 사용
mysql 드라이버 설치:go get github.com/go-sql-driver/mysql
package main
 
  
import (
    "database/sql"
    "fmt"
 
  
    _ "github.com/go-sql-driver/mysql"
)
 
  
func checkErr(errMasg error) {
    if errMasg != nil {
        panic(errMasg)
    }
}
 
  
func printResult(query *sql.Rows) {
    column, _ := query.Columns()              //          
    values := make([][]byte, len(column))     //values      ,     byte 
    scans := make([]interface{}, len(column)) //               , len(column)         
    for i := range values {                   //          [][]byte  
        scans[i] = &values[i]
    }
    results := make(map[int]map[string]string) //     map
    i := 0
    for query.Next() { //  ,       
        if err := query.Scan(scans...); err != nil {
            //query.Scan           scans[i] = &values[i],        values 
            fmt.Println(err)
            return
        }
        row := make(map[string]string) //    
        for k, v := range values {     //       values  ,      row 
            key := column[k]
            row[key] = string(v)
        }
        results[i] = row //      
        i++
    }
    for k, v := range results { //       
        fmt.Println(k, v)
    }
}
 
  
func main() {
    db, err := sql.Open("mysql", "yuanye:yuanye@tcp(127.0.0.1:3306)/test?charset=utf8")
    checkErr(err)
 
  
    //  sql      user 
    db.Query("create table user(id int primary key , username varchar(20), password varchar(20))")
 
  
    // user      
    db.Query("insert into user(username,password) values('yy', '123456')")
 
  
    //          
    v, err := db.Query("select * from user")
    checkErr(err)
 
  
    //      
    printResult(v)
 
  
    db.Query("update user set username = 'tt'")
 
  
    //          
    v, err = db.Query("select * from user")
    checkErr(err)
 
  
    //      
    printResult(v)
    
 
  
    db.Query("delete from user where id = 1")
 
  
}

xorm 기본 동작 사용
xorm 프레임 워 크 설치 go get github.com/go-xorm/cmd/xorm
package main
 
  
import (
    "fmt"
 
  
    _ "github.com/go-sql-driver/mysql"
    "github.com/go-xorm/xorm"
)
 
  
type Person struct {
    Id   int64  `xorm:"pk autoincr"`
    Name string `xorm:"varchar(25) notnull unique"`
}
 
  
var engine *xorm.Engine
 
  
func checkErr(errMasg error) {
    if errMasg != nil {
        panic(errMasg)
    }
}
 
  
func main() {
    var err error
    //        
    engine, err = xorm.NewEngine("mysql", "yuanye:yuanye@tcp(127.0.0.1:3306)/test?charset=utf8")
    checkErr(err)
 
  
    //      sql  ,   false
    engine.ShowSQL(true)
 
  
    //       
    err = engine.Sync2(new(Person))
 
  
    p := Person{
        Name: "yuanye",
    }
    //    
    engine.Insert(&p)
    //  id 1   
    p1 := Person{}
    engine.Id(1).Get(&p1)
    fmt.Println(p1)
 
  
    //  name yuanye   
    p2 := Person{}
    engine.Where("name = ?", "yuanye").Get(&p2)
    fmt.Println(p2)
 
  
    //  user                    
    p3 := &Person{Name: "yuanye"}
    has, _ := engine.Get(p3)
    fmt.Println(has)
 
  
    //        
    p4 := new(Person)
    total, _ := engine.Where("name = ?", "yuanye").Count(p4)
    fmt.Println(total)
 
  
    //  name “yy”
    p5 := Person{Name: "yy"}
    engine.Id(1).Update(&p5)
 
  
    //find        ,      、map  ,     where    
    p6 := make([]Person, 0)
    engine.Find(&p6)
    fmt.Println(p6)
 
  
    //  id=1   
    p7 := Person{}
    engine.Id(1).Delete(&p7)
    has, _ = engine.Id(1).Get(&p7)
    fmt.Println(has)
}

데이터베이스 열 속성 정의:
구체 적 인 태그 규칙 은 다음 과 같 습 니 다.다른 태그 의 키 워드 는 대소 문 자 를 구분 하지 않 지만 필드 이름 은 데이터베이스 에 따라 대소 문 자 를 구분 합 니 다.
name
현재 field 에 대응 하 는 필드 의 이름 을 선택 할 수 있 습 니 다.쓰 지 않 으 면 field 이름과 변환 규칙 에 따라 자동 으로 이름 을 짓 습 니 다.다른 키워드 와 충돌 할 경우 작은 따옴표 로 묶 으 십시오.
pk
Primary Key 인지 여 부 는 하나의 struct 에 여러 필드 가 이 표 시 를 사용 했다 면 이 여러 필드 는 복합 메 인 키 를 구성 합 니 다.단일 메 인 키 는 현재 int 32,int,int 64,uint 32,uint,uint 64,string 등 7 가지 Go 의 데이터 형식 을 지원 합 니 다.복합 메 인 키 는 이 7 가지 Go 의 데이터 형식의 조합 을 지원 합 니 다.
현재 30 여 개의 필드 형식 을 지원 합 니 다.자세 한 내용 은 본 논문 의 마지막 표를 참조 하 십시오.
필드 형식
autoincr
증가
[not]null 또는 notnull
비어 있 을 수 있 습 니까?
unique 혹은 unique(uniquename)
유일한 것 인지,괄호 를 넣 지 않 으 면 이 필드 는 중복 할 수 없습니다.괄호 를 넣 으 면 괄호 안에 유일한 색인 을 연결 하 는 이름 입 니 다.이 때 다른 필드 나 여러 필드 가 이 유 니 크 한 유 니 크 name 과 같 으 면 이 유 니 크 name 같은 필드 는 하나의 색인 을 구성 합 니 다.
index 또는 index(indexname)
색인 인지 여부 입 니 다.괄호 를 넣 지 않 으 면 이 필드 자체 가 색인 입 니 다.괄호 를 넣 으 면 괄호 안에 연합 색인 이름 이 있 습 니 다.이 때 다른 필드 나 여러 필드 가 이 index 의 indexname 과 같 으 면 이 indexname 과 같은 필드 가 연합 색인 을 구성 합 니 다.
extends
익명 의 구성원 구조 체 나 비 익명 의 구성원 구조 체 에 적용 되 며,이 구조 체 의 모든 구성원 이 데이터베이스 에 반영 되 었 음 을 나타 내 며,extends 는 1 급 깊이 만 불 러 옵 니 다.
-
이 Field 는 필드 맵 을 하지 않 습 니 다.
->
이 Field 는 데이터베이스 에서 읽 지 않 고 데이터베이스 에 만 기록 합 니 다.
이 Field 는 데이터베이스 에 쓰 지 않 고 데이터베이스 에서 만 읽 을 것 입 니 다.
created
이 Field 는 Insert 에서 현재 시간 으로 자동 대 입 됩 니 다.
updated
이 Field 는 Insert 나 Update 에서 현재 시간 으로 자동 대 입 됩 니 다.
deleted
이 Field 는 Delete 시 현재 시간 으로 설정 되 며 현재 기록 은 삭제 되 지 않 습 니 다.
version
이 Field 는 insert 시 기본 값 이 1 이 며,업데이트 할 때마다 자동 으로 1 이 추 가 됩 니 다.
default 0
기본 값 을 설정 합 니 다.
xorm 문서:https://www.kancloud.cn/kancloud/xorm-manual-zh-cn/56017

좋은 웹페이지 즐겨찾기