环境安装terminal install!!!
go get "github.com/go-sql-driver/mysql"
go get "xorm.io/xorm"
类似pojo
定义一个和表同步的结构体,并且自动同步结构体到数据库
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"time"
"xorm.io/xorm"
)
func main() {
//数据库连接info
//step1,准备数据库用户名密码
//①
var (
userName string = "mall"
passWord string = "??"
ipAddress string = "rm-uf6t9m0yx22dxrya5no.mysql.rds.aliyuncs.com"
port int = 3306
dbName string = "mall"
//charset string = "uft8mb4"
)
//构建数据库连接信息
//port int类型
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", userName, passWord, ipAddress, port, dbName)
//第一步创建引擎,driverName, dataSourceName 和 database/sql 接口相同
engine, err := xorm.NewEngine("mysql", dataSourceName)
if err != nil {
fmt.Println("数据库连接失败,", err)
}
//定义一个和表同步的结构体,并且自动同步结构体到数据库
//可以给数据库table随时追加字段!!!这个功能很强大
type UserXorm struct {
Id int64
Name string
Age int
Passwd string `xorm:"varchar(200)"`
Created time.Time `xorm:"created"`
Updated time.Time `xorm:"updated"`
}
err2 := engine.Sync(new(UserXorm))
if err2 != nil {
fmt.Println("表结构同步失败", err2)
}
}
数据插入
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"time"
"xorm.io/xorm"
)
func main() {
//数据库连接info
//step1,准备数据库用户名密码
//①
var (
userName string = "mall"
passWord string = "?"
ipAddress string = "rm-uf6t9m0yx22dxrya5no.mysql.rds.aliyuncs.com"
port string = "3306"
dbName string = "mall"
//charset string = "uft8mb4"
)
//构建数据库连接信息
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", userName, passWord, ipAddress, port, dbName)
//第一步创建引擎,driverName, dataSourceName 和 database/sql 接口相同
//xorm.NewEngine
engine, err := xorm.NewEngine("mysql", dataSourceName)
if err != nil {
fmt.Println("数据库连接失败,", err)
}
//定义一个和表同步的结构体,并且自动同步结构体到数据库
type UserXorm struct {
Id int64
Name string
Age int
Passwd string `xorm:"varchar(200)"`
Created time.Time `xorm:"created"`
Updated time.Time `xorm:"updated"`
}
//engine.Insert()
user := UserXorm{Id: 1000, Name: "kuangshen", Age: 18, Passwd: "123456"}
n, err := engine.Insert(&user)
if err != nil {
fmt.Println("插入失败了", err)
}
fmt.Println("插入成功,受影响的行数", n)
}
同时插入多条数据
https://gitea.com/xorm/xorm/src/branch/master/README_CN.md
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"time"
"xorm.io/xorm"
)
func main() {
//数据库连接info
//step1,准备数据库用户名密码
//①
var (
userName string = "mall"
passWord string = "???"
ipAddress string = "rm-uf6t9m0yx22dxrya5no.mysql.rds.aliyuncs.com"
port string = "3306"
dbName string = "mall"
//charset string = "uft8mb4"
)
//构建数据库连接信息
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", userName, passWord, ipAddress, port, dbName)
//第一步创建引擎,driverName, dataSourceName 和 database/sql 接口相同
//xorm.NewEngine
engine, err := xorm.NewEngine("mysql", dataSourceName)
if err != nil {
fmt.Println("数据库连接失败,", err)
}
//定义一个和表同步的结构体,并且自动同步结构体到数据库
type UserXorm struct {
Id int64
Name string
Age int
Passwd string `xorm:"varchar(200)"`
Created time.Time `xorm:"created"`
Updated time.Time `xorm:"updated"`
}
//engine.Insert()
//插入一条数据,改语法可以支持同时插入多条数据
//user := UserXorm{Id: 1002, Name: "lisi", Age: 16, Passwd: "123456"}
//n, err := engine.Insert(&user)
//if err != nil {
// fmt.Println("插入失败了", err)
//}
//fmt.Println("插入成功,受影响的行数", n)
//fmt.Println(time.Now())
//插入多条
user1 := UserXorm{Id: 1003, Name: "wangwu", Age: 20, Passwd: "123456"}
user2 := UserXorm{Id: 1004, Name: "angel", Age: 19, Passwd: "123456"}
n, err := engine.Insert(&user1, &user2)
if err != nil {
fmt.Println("插入失败了", err)
}
fmt.Println("插入成功,受影响的行数", n)
//fmt.Println(time.Now())
}
数据更新,数据删除
Update
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"time"
"xorm.io/xorm"
)
func main() {
//数据库连接info
//step1,准备数据库用户名密码
//①
var (
userName string = "mall"
passWord string = "????"
ipAddress string = "rm-uf6t9m0yx22dxrya5no.mysql.rds.aliyuncs.com"
port string = "3306"
dbName string = "mall"
//charset string = "uft8mb4"
)
//构建数据库连接信息
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", userName, passWord, ipAddress, port, dbName)
//第一步创建引擎,driverName, dataSourceName 和 database/sql 接口相同
//xorm.NewEngine
engine, err := xorm.NewEngine("mysql", dataSourceName)
if err != nil {
fmt.Println("数据库连接失败,", err)
}
//定义一个和表同步的结构体,并且自动同步结构体到数据库
type UserXorm struct {
Id int64
Name string
Age int
Passwd string `xorm:"varchar(200)"`
Created time.Time `xorm:"created"`
Updated time.Time `xorm:"updated"`
}
//update
user := UserXorm{Age: 8}
//记得一定要用取地址符号&
n, err := engine.ID(1000).Update(&user)
if err != nil {
fmt.Println("报错了,", err)
}
fmt.Println("update成功--", n)
}
delete
注意:=,与=
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"time"
"xorm.io/xorm"
)
func main() {
//数据库连接info
//step1,准备数据库用户名密码
//①
var (
userName string = "mall"
passWord string = "???"
ipAddress string = "rm-uf6t9m0yx22dxrya5no.mysql.rds.aliyuncs.com"
port string = "3306"
dbName string = "mall"
//charset string = "uft8mb4"
)
//构建数据库连接信息
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", userName, passWord, ipAddress, port, dbName)
//第一步创建引擎,driverName, dataSourceName 和 database/sql 接口相同
//xorm.NewEngine
engine, err := xorm.NewEngine("mysql", dataSourceName)
if err != nil {
fmt.Println("数据库连接失败,", err)
}
//定义一个和表同步的结构体,并且自动同步结构体到数据库
type UserXorm struct {
Id int64
Name string
Age int
Passwd string `xorm:"varchar(200)"`
Created time.Time `xorm:"created"`
Updated time.Time `xorm:"updated"`
}
//update
user := UserXorm{Age: 8}
//记得一定要用取地址符号&
n, err := engine.ID(1000).Update(&user)
if err != nil {
fmt.Println("报错了,", err)
}
fmt.Println("update成功--", n)
//del
user = UserXorm{Name: "qingjiang"}
n, err = engine.ID(1000).Delete(&user)
if err != nil {
fmt.Println("报错了,", err)
}
fmt.Println("Delete删掉了--", n)
}
Exec
//Exec约等于原生sql
engine.Exec("update user_xorm set age=? where id = ?", 10, 1001)
剩余信息看文档api,师父领进门!!!
数据查询
Query 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte。QueryString 返回 []map[string]string, QueryInterface 返回 []map[string]interface{}.
Query版本一
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"time"
"xorm.io/xorm"
)
func main() {
//数据库连接info
//step1,准备数据库用户名密码
//①
var (
userName string = "mall"
passWord string = "????"
ipAddress string = "rm-uf6t9m0yx22dxrya5no.mysql.rds.aliyuncs.com"
port string = "3306"
dbName string = "mall"
//charset string = "uft8mb4"
)
//构建数据库连接信息
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", userName, passWord, ipAddress, port, dbName)
//第一步创建引擎,driverName, dataSourceName 和 database/sql 接口相同
//xorm.NewEngine
engine, err := xorm.NewEngine("mysql", dataSourceName)
if err != nil {
fmt.Println("数据库连接失败,", err)
}
//定义一个和表同步的结构体,并且自动同步结构体到数据库
type UserXorm struct {
Id int64
Name string
Age int
Passwd string `xorm:"varchar(200)"`
Created time.Time `xorm:"created"`
Updated time.Time `xorm:"updated"`
}
//select数据库查询,3个Query,QueryString,QueryInterface
//每个方法返回值不同的!!!所以需要赋值符号:=
//Query
results, err := engine.Query("select * from user_xorm")
fmt.Println("results--", results)
fmt.Println()
results2, err := engine.QueryString("select * from user_xorm")
fmt.Println("results2--", results2)
fmt.Println()
results3, err := engine.QueryInterface("select * from user_xorm")
fmt.Println("results3--", results3)
fmt.Println()
}