首页 > 其他分享 >Go Xorm简单使用

Go Xorm简单使用

时间:2023-03-24 18:34:45浏览次数:44  
标签:Engine err Xorm fmt 支持 io 简单 Go xorm

官网相关文档

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
	}
}

标签:Engine,err,Xorm,fmt,支持,io,简单,Go,xorm
From: https://www.cnblogs.com/bangbangzoutianya/p/17252998.html

相关文章

  • GitOps 实操手册 5:构建 ArgoCD GitOps 工作流
    内容简介本实验手册系列包含七个主题,涵盖了从应用容器化到GitOps工作流的实现与高级特性。通过这些实验手册,您将学习到如何构建、部署和管理应用,以及如何在Kubernetes集......
  • pinia的简单基本demo
    在组件中使用Pinia状态管理:<template><div><p>当前计数:{{count}}</p><button@click="increment">增加</button><button@click="decrement">......
  • golang pprof 监控系列(1) —— go trace 统计原理与使用
    golangpprof监控系列(1)——gotrace统计原理与使用服务监控系列文章服务监控系列视频关于gotooltrace的使用,网上有相当多的资料,但拿我之前初学golang的经验来......
  • 软件工程日报——简单实现安卓手机端的地铁系统
    今天,我和我的搭档初步实现了安卓端的地铁系统,完成了线路查询、换乘查询和站点查询三个查询,并且成功显示出正确的数据1.线路查询  2.站点查询 3.换乘查询  ......
  • 简单介绍最新python 字符串数组互转问题
    字符串转list数组str='1,2,3'arr=str.split(',')gpu_ids分配name=opt.namegpu_ids=[int(item)foriteminopt.gpu_ids.split(',')]#setgpuidsiflen(gpu_i......
  • Linux+Typora+Picgo图床配置
    Linux+Typora+Picgo图床配置首先不建议安装在UbuntuStore里的版本,会有一些限制。首先安装node.js去官网下载编译好的源码,配置软连接,使全局都可以使用node命令。ln-......
  • RunnerGo与JMeter在产品设计方面的比较分析
    当谈到对于性能测试的需求时,JMeter和RunnerGo在测试场景设置、执行性能测试、性能测试结果分析等方面都提供了很多功能,但两个工具的结构方面仍然存在一些区别。以下是详细的......
  • 性能测试:如何在RunnerGo 中寻找高效的解决方案
    性能测试是软件质量保障的关键环节之一,性能测试可以评估应用的可靠性、稳定性和响应时间。然而,性能测试通常需要大量的时间和资源,因此需要使用高效的性能测试工具来减少测试......
  • 性能测试:如何在RunnerGo 中寻找高效的解决方案
    性能测试是软件质量保障的关键环节之一,性能测试可以评估应用的可靠性、稳定性和响应时间。然而,性能测试通常需要大量的时间和资源,因此需要使用高效的性能测试工具来减少测......
  • RunnerGo与JMeter在产品设计方面的比较分析
    当谈到对于性能测试的需求时,JMeter和RunnerGo在测试场景设置、执行性能测试、性能测试结果分析等方面都提供了很多功能,但两个工具的结构方面仍然存在一些区别。以下是详细......