自学内容网 自学内容网

2024年了,go xorm生成mysql的结构体这么操作

ORM,即pobject-RelationlMapping,它的作用是在关系型数据库和对象之间作一个映射,这样我们在具体操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

比较好的Go语言ORM包括:xorm与gorm

xorm 概述

xorm是一个Go语言的ORM库,通过它可以很方便的操作数据库。它的设计重点是高性能和易用性。XORM支持多种数据库,包括MySQL、PostgreSQL、SQLite、Oracle和SQL Server,并提供了丰富的查询语言。XORM还支持事务和缓存机制,可以提高数据库操作的性能。

xorm的官网:https://xorm.io/

根据结构体生成数据表

xorm支持根据结构体生成数据表,如果表不存在,则会自动创建。以mysql为例,示例代码如下:

type users struct {
Id         int64     `xorm:"pk autoincr" json:"id"` //指定主键并自增
UserId     int       `xorm:"unique" json:"user_id"`
Name       string    `json:"name"`
Age        int       `json:"age"`
Address    string    `json:"address"`
CreateTime time.Time `xorm:"created" json:"create_time"`
UpdateTime time.Time `xorm:"updated" json:"update_time"`
}

func init() {
sqlStr := "root:123456@tcp(127.0.0.1:3306)/gin_demo?charset=utf8&parseTime=true&loc=Local"
var err error

//创建数据库引擎
myXorm, err = xorm.NewEngine("mysql", sqlStr)
if err != nil {
fmt.Println("数据库连接失败:", err)
}

//创建或者同步表,表名称是users
//如果数据表不存在,会根据users结构体自动创建
err = myXorm.Sync(new(users))
if err != nil {
fmt.Println("数据表同步失败:", err)
}
}

生成的数据表结构:

CREATE TABLE `users` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `user_id` bigint unsigned NOT NULL COMMENT '用户编号',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '用户姓名',
  `age` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '用户年龄',
  `address` varchar(255) NOT NULL DEFAULT '' COMMENT '地址',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `key_user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

根据数据表生成结构体

踩坑

那么,有没有办法反过来,自定义好数据表结构,然后在代码中生成结构体?

查了很多资料,网上大部分的描述都是 通过 xorm 的 reverse命令反转一个数据库结构,生成代码。比如下面这样:
在这里插入图片描述

参考:https://www.cnblogs.com/liuzhongchao/p/9497326.html

解决方案

查了很多资料都和上面的解决方案类似,但是如今已经2024年9月了,我试了下上面的方案已经走不通了。后来根据xorm官网(https://xorm.io/) 的描述,现在需要安装reverse才能实现。踩了一些列坑之后,总结方法和操作步骤如下:

  • 安装 reverse: go install xorm.io/reverse@latest
  • 查看版本:reverse -h
    在这里插入图片描述
  • 在项目的任意目录编辑配置文件 vim generate_db_struct.yml,用来配置连接数据库的信息:
kind: reverse
name: users
source:
  database: mysql
  conn_str: 'root:123456@tcp(127.0.0.1:3306)/gin_demo?parseTime=true'
targets:
- type: codes
  language: golang
  output_dir: ./auto_generated
  • 执行命令:reverse -f generate_db_struct.yml
  • 进入 auto_generated 目录查看,已生成 models.go文件:
type Users struct {
Id         uint      `xorm:"not null pk autoincr comment('ID') UNSIGNED INT"`
UserId     uint64    `xorm:"not null comment('用户编号') unique UNSIGNED BIGINT"`
Name       string    `xorm:"not null default '' comment('用户姓名') VARCHAR(255)"`
Age        uint      `xorm:"not null default 0 comment('用户年龄') UNSIGNED TINYINT"`
Address    string    `xorm:"not null default '' comment('地址') VARCHAR(255)"`
CreateTime time.Time `xorm:"not null default CURRENT_TIMESTAMP comment('添加时间') DATETIME"`
UpdateTime time.Time `xorm:"not null default CURRENT_TIMESTAMP comment('更新时间') DATETIME"`
}

更多参考:
https://blog.csdn.net/rxbook/article/details/132318225
https://www.cnblogs.com/rxbook/p/16012922.html


原文地址:https://blog.csdn.net/rxbook/article/details/142389030

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!