芯が強い人になるESTJ-A

# 2023-GO-XORM框架

IT開発 Tags: 无标签 阅读: 191

截屏2023-03-15 7.11.02.jpg
https://xorm.io/

环境安装terminal install!!!

go get "github.com/go-sql-driver/mysql"

go get "xorm.io/xorm"

截屏2023-03-15 16.31.52.jpg

类似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)
    }

}

数据插入

截屏2023-03-15 17.19.48.jpg

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())

}

数据更新,数据删除

截屏2023-03-15 18.09.47.jpg

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)

}

截屏2023-03-15 19.14.17.jpg

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)

}

截屏2023-03-15 19.38.44.jpg

Exec

//Exec约等于原生sql
    engine.Exec("update user_xorm set age=? where id = ?", 10, 1001)

剩余信息看文档api,师父领进门!!!

数据查询

截屏2023-03-15 19.56.07.jpg
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()

}

截屏2023-03-15 20.27.10.jpg

事物处理