Go Xorm简单使用

发布时间 2023-03-24 18:24:26作者: 弩哥++

官网相关文档

https://xorm.io/zh/docs/chapter-01/1.engine/
https://gitea.com/xorm/xorm/src/branch/master/README_CN.md

xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便

安装

go get xorm.io/xorm

特性:

  • 支持 Struct 和数据库表之间的灵活映射,并支持自动同步
  • 事务支持
  • 同时支持原始SQL语句和ORM操作的混合执行
  • 使用连写来简化调用
  • 支持使用ID, In, Where, Limit, Join, Having, Table, SQL, Cols等函数和结构体等方式作为条件
  • 支持级联加载Struct
  • Schema支持(仅Postgres)
  • 支持缓存
  • 通过 xorm.io/reverse 支持根据数据库自动生成 xorm 结构体
  • 支持记录版本(即乐观锁)
  • 通过 xorm.io/builder 内置 SQL Builder 支持
  • 上下文缓存支持
  • 支持日志上下文

使用

  • 封装一个连接mysql的函数
package util

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

var Engine *xorm.Engine
var (
	host        = "127.0.0.1"
	port        = "3306"
	username    = "root"
	pasword     = "111111"
	defaultCode = "charset=utf8"
	dbName      = "test"
)

func InitMysql() error {
	var err error
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s", username, pasword, host, port, dbName, defaultCode)
	Engine, err = xorm.NewEngine("mysql", dsn)
	if err != nil {
		fmt.Println(err)
		return err
	}
	err = Engine.Ping()
	if err != nil {
		fmt.Println(err)
		return err
	}
	fmt.Println("connect success")
	Engine.SetMapper(names.SameMapper{}) //设置表字段名与结构体字段名一致,默认的是SnakeMapper
	return nil
}

  • 调用
package main

import (
	"basicProject/util"
	"fmt"
)

type Goods struct {
	Id         int
	Name       string
	CreateTime string
	UpdateTime string
}

func main() {
	err := util.InitMysql()
	if err != nil {
		fmt.Println("connect fail")
	}
	err = util.Engine.Sync(new(Goods)) //同步,把结构体同步到数据库里,生成对应的表和字段
					  //同步后如果结构体又增加了字段,再次编译运行后就会自动同步新的字段到数据表里
	if err != nil {
		fmt.Println(err)
		return
	}
}