安装
go get xorm.io/xorm
连接数据库,创建引擎
var (
userName string = "root"
passWord string = "123456"
idAddress string = "127.0.0.1"
port string = "3306"
dbName string = "go_text"
charset string = "utf8"
)
dataSourceName := fmt. Sprintf ( "%s:%s@tcp(%s:%s)/%s?charset=%s" , userName, passWord, idAddress, port, dbName, charset)
engine, err := xorm. NewEngine ( "mysql" , dataSourceName)
if err != nil {
fmt. Println ( "连接失败" )
} else {
fmt. Println ( "数据库连接成功" )
}
定义一个和表同步的结构体,并且自动同步结构体到数据库
type User struct {
Id int64
Name string
Age int
Passwd string `xorm:"varchar(200)"`
Created time. Time `xorm:"created"`
Updated time. Time `xorm:"updated"`
}
err = engine. Sync ( new ( User) )
if err != nil {
fmt. Println ( "表结构同步失败" )
} else {
fmt. Println ( "表结构同步成功" )
}
数据插入
user := User{ Id: 1001 , Name: "打阿伟" , Age: 18 , Passwd: "123456" }
n, _ := engine. Insert ( & user)
if n >= 1 {
fmt. Println ( "数据插入成功" )
}
var users [ ] User
users = append ( users, User{ Id: 1003 , Name: "阿伟" , Age: 18 , Passwd: "123456" } )
users = append ( users, User{ Id: 1004 , Name: "伟" , Age: 18 , Passwd: "123456" } )
n, _ = engine. Insert ( & users)
if n >= 1 {
fmt. Println ( "插入成功" )
}
数据的更新与删除
user := User{ Name: "周南" }
n, _ := engine. ID ( 1000 ) . Update ( & user)
if n >= 1 {
fmt. Println ( "更新成功" )
}
user = User{ Name: "打阿伟" }
n, _ = engine. ID ( 1001 ) . Delete ( & user)
fmt. Println ( n)
rs, err := engine. Exec ( "update user set age =10 where id =1000" )
if err != nil {
fmt. Println ( err)
}
fmt. Println ( rs)
条件查询和遍历输出
result, err := engine. Query ( "select*from user" )
fmt. Println ( result)
result2, err := engine. QueryString ( "select*from user" )
fmt. Println ( result2)
result3, err := engine. QueryInterface ( "select*from user" )
fmt. Println ( result3)
user := User{ }
engine. Get ( & user)
fmt. Println ( user)
user1 := User{ Name: "阿伟" }
engine. Where ( "name=?" , user1. Name) . Desc ( "id" ) . Get ( & user1)
fmt. Println ( user1)
var name string
engine. Table ( & user) . Where ( "id=1003" ) . Cols ( "name" ) . Get ( & name)
fmt. Println ( name)
var users [ ] User
engine. Where ( "passwd=123456" ) . And ( "age=18" ) . Limit ( 10 , 0 ) . Find ( & users)
fmt. Println ( users)
user = User{ Passwd: "123456" }
counts, err := engine. Count ( & user)
fmt. Println ( counts)
engine. Iterate ( & User{ Passwd: "123456" } , func ( idx int , bean interface { } ) error {
user := bean. ( * User)
fmt. Println ( user)
return nil
} )
rows, err := engine. Rows ( & User{ Passwd: "123456" } )
defer rows. Close ( )
userBean := new ( User)
for rows. Next ( ) {
rows. Scan ( userBean)
fmt. Println ( userBean)
}
事务处理
session := engine. NewSession ( )
defer session. Close ( )
session. Begin ( )
defer func ( ) {
err := recover ( )
if err != nil {
fmt. Println ( err)
fmt. Println ( "rollback" )
session. Rollback ( )
} else {
session. Commit ( )
}
} ( )
user1 := User{ Id: 1005 , Name: "皱起远" , Age: 18 , Passwd: "123456" }
if _ , err := session. Insert ( & user1) ; err != nil {
panic ( err)
}
user2 := User{ Name: "朱加祎" , Age: 18 , Passwd: "123456" }
if _ , err := session. Where ( "id=1000" ) . Update ( & user2) ; err != nil {
panic ( err)
}
if _ , err := session. Exec ( "delete from user where name='皱起远'" ) ; err != nil {
panic ( err)
}