go 언어 orm 프레임 워 크--xorm
24971 단어 go.
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/xormpackage 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
go 의 값 전달 과 참조 전달절편 과 지 도 는 모두 인용 유형 이다.현지에서 새로운 변수 로 할당 되 었 을 때 같은 내부 데이터 구 조 를 가리킨다.따라서 그 중의 한 변 수 를 바 꾸 면 다른 변수 에 영향 을 줄 수 있다. 다음은 참조 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.