下面给你一套常用、可直接用的 XORM(Go ORM)示例代码,覆盖连接数据库、建表、CRUD、事务、条件查询等核心用法。


一、安装依赖

go get xorm.io/xorm
go get github.com/go-sql-driver/mysql


二、初始化数据库连接

package main

import (
	"fmt"
	"log"

	_ "github.com/go-sql-driver/mysql"
	"xorm.io/xorm"
)

var engine *xorm.Engine

func initDB() {
	var err error
	dsn := "user:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=true"
	engine, err = xorm.NewEngine("mysql", dsn)
	if err != nil {
		log.Fatal(err)
	}

	// 显示 SQL(开发环境建议开启)
	engine.ShowSQL(true)

	// 测试连接
	if err = engine.Ping(); err != nil {
		log.Fatal(err)
	}
}

func main() {
	initDB()
	fmt.Println("DB connected")
}


三、定义结构体(映射数据表)

type User struct {
	Id        int64  `xorm:"pk autoincr"`
	Username  string `xorm:"varchar(50) notnull unique"`
	Email     string `xorm:"varchar(100)"`
	Age       int
	CreatedAt time.Time `xorm:"created"`
	UpdatedAt time.Time `xorm:"updated"`
}


四、自动建表

err := engine.Sync2(new(User))
if err != nil {
	log.Fatal(err)
}


五、CRUD 示例

1️⃣ 新增数据

user := &User{
	Username: "ajie",
	Email:    "ajie@test.com",
	Age:      25,
}

_, err := engine.Insert(user)


2️⃣ 查询一条

var user User
has, err := engine.Where("username = ?", "ajie").Get(&user)
if has {
	fmt.Println(user)
}


3️⃣ 查询多条

var users []User
err := engine.Where("age > ?", 18).Limit(10).Find(&users)


4️⃣ 更新数据

_, err := engine.ID(1).Update(&User{Email: "new@test.com"})


5️⃣ 删除数据

_, err := engine.ID(1).Delete(&User{})


六、事务示例(非常重要)

session := engine.NewSession()
defer session.Close()

if err := session.Begin(); err != nil {
	return
}

_, err := session.Insert(&User{Username: "u1"})
if err != nil {
	session.Rollback()
	return
}

_, err = session.Insert(&User{Username: "u2"})
if err != nil {
	session.Rollback()
	return
}

session.Commit()


七、常用高级用法

条件组合

engine.Where("age > ?", 18).
	And("email like ?", "%@test.com").
	Desc("id").
	Find(&users)

只更新非空字段

engine.ID(1).Cols("email").Update(&user)

原生 SQL

engine.SQL("SELECT * FROM user WHERE age > ?", 20).Find(&users)


八、适合哪些项目?

  • 中小型 Go 项目
  • ✅ 管理系统 / 后台接口
  • ✅ Spring Boot + MySQL 项目迁移到 Go(你之前做过类似)

如果你愿意,我可以帮你:

  • 🔹 写 完整 MVC / REST API 示例
  • 🔹 给你 XORM vs GORM 对比
  • 🔹 结合 Gin + XORM 实战项目结构

你是打算用在 什么项目里?我可以直接按你的场景给代码。