go xorm 实例 - 实现对mysql增删改查以及事务的操作

本文用go实现对mysql的增删改查以及事务的操作:

1、表结构:

type User struct {
    Id int64
    Name string
    Age int
    Passwd string `xorm:"varchar(200)"`
    Created time.Time `xorm:"created"`
    Updated time.Time `xorm:"updated"`
}

2、连接数据库,并新建数据库表结构:

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/go-xorm/xorm"
    "time"
)

func main(){
    host := "localhost"
    port := "3306"
    username := "root"
    password := "123456"
    database := "test"
    dataSourceName := fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8", username, password, host, port, database)

    engine, err := xorm.NewEngine("mysql", dataSourceName)
    if err != nil{
        fmt.Println(err)
    }

    //建表
    err = engine.Sync2(new(User))
    if err != nil{
        fmt.Println("error in create table user, ", err)
    }
}

3、增---表中插入一行,在main函数中添加如下:

var user User
user.Name = "guigui"
user.Salt = "hell"
user.Age = 18
user.Passwd = "23"
affected, err := engine.Insert(&user)
if err != nil{
    fmt.Println(err)
}

4、删---删除某行,在main函数中添加如下:

var user User
affected, err := engine.ID(2).Delete(&user)
if err != nil{
    fmt.Println(err)
}

5、改---修改表结构,main函数中添加如下:

mm, err := engine.Exec("update user set name = ? where id = ?", "lgr", 1)
if err != nil{
    fmt.Println(err)
}
fmt.Println(mm)

6、查---查询多行结果,并遍历输出,查询方法很多,Query(返回数据类型为[]map[string][]byte)、QueryString(返回数据类型为[]map[string]string)、QueryInterface(返回数据类型为[]map[string]interface{}):

1)QueryString方法实例:

results, err := engine.QueryString("select * from user")
for k, v := range results{
    fmt.Println(k)
    for m, n := range v{
        fmt.Println(m)
        fmt.Println(n)
    }
    fmt.Println("=====")
}

2)查询还可以用如下方法:

var users []User
err = engine.Table("user").Where("name = ?", "lgr").And("age > 10").Find(&users)
//以上相当于sql语句:SELECT * FROM user WHERE name = "lgr" AND age > 10
if err != nil{
    fmt.Println(err)
}
fmt.Println(users)

7、实现事务的两种方法:

1)一种,新建session,并使用session方法实现,在main函数中调用如下方法:

func myTransaction(engine  *xorm.Engine) error{
    session := engine.NewSession()
    defer session.Close()
    if err := session.Begin(); err != nil {
        // if returned then will rollback automatically
        return err
    }

    user := User{Name: "xiaoxiao", Salt: "dev", Age: 18, Passwd: "111"}
    if _, err := session.Insert(&user); err != nil {
        return err
    }

    if _, err := session.Exec("update user set name = ? where id = ?", 70, "8"); err != nil {
        return err
    }
    return session.Commit()
}

2)第二种,重写Transaction方法,在main函数中添加如下代码:

res, err := engine.Transaction(func(session *xorm.Session) (interface{}, error) {
    user := User{Name: "xiaoxiao", Salt: "dev", Age: 18, Passwd: "111"}

    if _, err := session.Insert(&user); err != nil {
        return nil, err
    }

    if _, err := session.Exec("update user set name = ? where id = ?", 70, "id"); err != nil {
        return nil, err
	}
    return nil, nil
    })
if err != nil{
    fmt.Println(err)
}
fmt.Println(res)

更多请查看官网

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值