golang之xorm使用

本文详细介绍使用Golang结合XORM进行数据库操作的过程,包括数据库连接、表结构定义、数据的增删改查等核心操作,适合初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

golang之xorm使用

第一次写博客刚刚学golang语言,下面说一下xorm遇到的坑!!
有什么错误请大牛指点!!!

导入数据库驱动

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

声明数据库表的结构体

这里要说明一下结构体名字就是表名字以大写字母开头

type User struct {
	Account string `json:"account" xorm:"not null pk default '' VARCHAR(32)"`
	Password  string `json:"passwd" xorm:"not null default '' VARCHAR(32)"`
	Email   string `json:"email" xorm:"not null default '' VARCHAR(32)"`
	
}

上面的是声明名字为User的结构体,User就是表名字user
这里要说一下声明结构体一定要设置一个主键钮!!!不然后面的查询修改都不会起效!

Account string ` xorm:"pk"`

声明全局变量

var engine *xorm.Engine

创建orm引擎

func init() {
	var err error
	engine, err = xorm.NewEngine("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
	if err != nil {
		log.Fatal("数据库连接失败:", err)
	}
//然后同步表
	if  err := engine.Sync2(new(Account)); err != nil {
		log.Fatal("数据表同步失败:", err)
	}
}

这里解释一下 xorm.NewEngine是创建数据库连接(这个不是真正的连接,只是一个抽象而已)
"mysql"这个是数据库驱动
“root:root@tcp(127.0.0.1:3306)/test?charset=utf8” 格式是数据库账号:数据库密码@tcp(数据库ip地址:数据库端口)/数据库名字?charset=字符集
engine.Sync2这个是同步表,如果没有这个表会自动创建!!!!

插入数据

func Install (account,password,email string){
	str1 := new(User)
	str1.Account = account
	str1.Password = password
	str1.Email = email
	install, err := engine.Insert(str1)
	if err != nil {
		log.Fatal("注册失败:", err)
	}
	fmt.Println(install)

}

查询数据

func Find (account string) {
	a := new(User)
	str, err := engine.ID(account).Get(a)
	if err != nil {
		log.Fatal("查询失败:", err)
	}
	fmt.Println(str)
	fmt.Println(a.Account,a.Password,a.Email)

}

Get所返回的类型是bool 和err

修改数据

func update (account,oldpwd,newpwd string) {
	a := new(User)
	str, err := engine.ID(account).Get(a)
	if err != nil {
		log.Fatal("查询失败:", err)
	}
	if str == false {
		fmt.Println("用户名不存在!")
		return
	}
	if a.Password != oldpwd {
		fmt.Println("旧密码不一样!")
		return
	}
	a.Password = newpwd
	addr , err := engine.ID(account).Update(a)
	if err != nil{
		fmt.Println("修改失败!")
	}

	fmt.Println("修改成功!",addr)
}

engine.Update()返回两个参数一个是修改影响的行数,一个是err

贴上完整代码

package main

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

//定义结构体(xorm支持双向映射)

type User struct {
	Account string `json:"account" xorm:"not null pk default '' VARCHAR(32)"`
	Password  string `json:"passwd" xorm:"not null default '' VARCHAR(32)"`
	Email   string `json:"email" xorm:"not null default '' VARCHAR(32)"`
}
//定义orm引擎
var engine  *xorm.Engine



//创建orm引擎
func init() {
	var err error
	engine, err = xorm.NewEngine("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
	if err != nil {
		log.Fatal("数据库连接失败:", err)
	}

	if  err := engine.Sync2(new(User)); err != nil {
		log.Fatal("数据表同步失败:", err)
	}

}


func main(){

	Install("123456","123456","790379511@qq.com")
	Find("123456")
	update("123456","123456","1234567")
}

func Install (account,password,email string){
	str1 := new(User)
	str1.Account = account
	str1.Password = password
	str1.Email = email
	install, err := engine.Insert(str1)
	if err != nil {
		log.Fatal("注册失败:", err)
	}
	fmt.Println(install)

}

func Find (account string) {
	a := new(User)
	str, err := engine.ID(account).Get(a)
	if err != nil {
		log.Fatal("查询失败:", err)
	}
	fmt.Println(str)
	fmt.Println(a.Account,a.Password,a.Email)

}

func update (account,oldpwd,newpwd string) {
	a := new(User)
	str, err := engine.ID(account).Get(a)
	if err != nil {
		log.Fatal("查询失败:", err)
	}
	if str == false {
		fmt.Println("用户名不存在!")
		return
	}

	if a.Password != oldpwd {
		fmt.Println("旧密码不一样!")
		return
	}
	a.Password = newpwd
	addr , err := engine.ID(account).Update(a)
	if err != nil{
		fmt.Println("修改失败!")
	}

	fmt.Println("修改成功!",addr)
}

更多xorm相关操作请看官网手册:http://www.xorm.io/docs/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个初中鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值