文档章节

使用xorm工具,根据数据库自动生成 go 代码

万建宁
 万建宁
发布于 2018/12/04 13:20
字数 1147
阅读 430
收藏 4

使用xorm工具,根据数据库自动生成 go 代码

引入

使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型。因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段名的对应关系。久而久之,这是一个非常繁琐的过程。事情变得繁琐了,我们都会想,有没有好的办法自动生成 model 呢?今天,记录一种自动生成代码的方法 —— xorm 工具。

关于 xorm

xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。我在项目中经常使用,它的特性如下:

  • 支持Struct和数据库表之间的灵活映射,并支持自动同步表结构
  • 事务支持
  • 支持原始SQL语句和ORM操作的混合执行
  • 使用连写来简化调用
  • 支持使用Id, In, Where, Limit, Join, Having, Table, Sql, Cols等函数和结构体等方式作为条件
  • 支持级联加载Struct
  • 支持LRU缓存(支持memory, memcache, leveldb, redis缓存Store) 和 Redis缓存
  • 支持反转,即根据数据库自动生成xorm的结构体
  • 支持事件
  • 支持created, updated, deleted和version记录版本(即乐观锁)

 

想了解更多请移步:http://www.xorm.io/

xorm 工具

xorm 是一组数据库操作命令的工具,包含如下命令:

  • reverse 反转一个数据库结构,生成代码
  • shell 通用的数据库操作客户端,可对数据库结构和数据操作
  • dump Dump数据库中所有结构和数据到标准输出
  • source 从标注输入中执行SQL文件
  • driver 列出所有支持的数据库驱动

那我们该如何使用 reverse 命令根据数据表结构生成 go 代码呢?

首先我们要下载该工具 :

go get github.com/go-xorm/cmd/xorm

同时需要安装对应的 driver :

go get github.com/go-sql-driver/mysql  //MyMysql
go get github.com/ziutek/mymysql/godrv  //MyMysql
go get github.com/lib/pq  //Postgres
go get github.com/mattn/go-sqlite3  //SQLite

还需要下载 xorm :

go get github.com/go-xorm/xorm

编译 cmd/xorm 会生成 xorm 工具, 假如环境变量。

cd到安装路径 
1.cd G:\go_workspace\GOPATH\src\github.com\go-xorm\cmd\xorm 
2.go build 
3.go build //这样就生成了xorm.exe

3.xorm reverse postgres “dbname=test sslmode=disable user=postgres password=123” templates/goxorm

执行完毕,会在当前路径cd G:\go_workspace\GOPATH\src\github.com\go-xorm\cmd\xorm下的model文件夹里 
出现test数据库中,所有表的go model 
这里写图片描述 
user.go

package model

import (
    "time"
)

type User struct {
    Id      int       `xorm:"not null pk autoincr INTEGER"`
    Name    string    `xorm:"VARCHAR(20)"`
    Created time.Time `xorm:"default 'now()' DATETIME"`
    ClassId int       `xorm:"default 1 INTEGER"`
}
  •  

class.go

package model

type Class struct {
    Id   int    `xorm:"not null pk autoincr INTEGER"`
    Name string `xorm:"VARCHAR(20)"`
}

 

这时候,执行 xorm help reverse 能获取帮助信息如下:

usage: xorm reverse [-s] driverName datasourceName tmplPath [generatedPath] [tableFilterReg]

according database's tables and columns to generate codes for Go, C++ and etc.

    -s                Generated one go file for every table
    driverName        Database driver name, now supported four: mysql mymysql sqlite3 postgres
    datasourceName    Database connection uri, for detail infomation please visit driver's project page
    tmplPath          Template dir for generated. the default templates dir has provide 1 template
    generatedPath     This parameter is optional, if blank, the default value is model, then will
                      generated all codes in model dir
    tableFilterReg    Table name filter regexp

可以知道,执行参数 -s 表示为每张表创建一个单独文件。接下来的参数依次是:驱动,数据源,模板目录(在源码的 /cmd/xorm/templates/goxorm 可根据需求定制),生成目录,表格过滤条件。

接下来我们以 Mysql 为例介绍使用方法。

xorm reverse mysql name:password@(ip:port)/xxx?charset=utf8 /cmd/xorm/templates/goxorm

这里输出目录参数省略,会在当前目录建立一个 model 目录,该目录下就是自动生成的 go 代码,, 驼峰命名方式。具体内容如下:

package model

type TestModel struct {
    Id            int    `json:"id" xorm:"not null pk autoincr INT(11)"`
    VpsName       string `json:"vps_name" xorm:"VARCHAR(30)"`
    VpsIp         string `json:"vps_ip" xorm:"CHAR(15)"`
    VpsPrivateIp  string `json:"vps_private_ip" xorm:"CHAR(50)"`
    VpsCpu        int    `json:"vps_cpu" xorm:"INT(11)"`
    VpsMem        int    `json:"vps_mem" xorm:"INT(11)"`
    VpsDisk       int    `json:"vps_disk" xorm:"INT(11)"`
    VpsStatus     string `json:"vps_status" xorm:"VARCHAR(255)"`
    LastHeartTime int    `json:"last_heart_time" xorm:"INT(11)"`
    CreateTime    int    `json:"create_time" xorm:"INT(11)"`                                                       LastTime      int    `json:"last_time" xorm:"INT(11)"`
}

到这里,就生成了我们想要的 model , 免去了手写的繁琐过程。

© 著作权归作者所有

万建宁
粉丝 3
博文 101
码字总数 190161
作品 0
西安
程序员
私信 提问
xorm操作PostgreSQL数据库(增删改查实例)

一、xorm介绍 xorm是一个简单而强大的Go语言ORM库.通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单...

mickelfeng
2018/11/27
238
0
xorm速记卡 Quick Reference

xorm is a very famous golang lib, for operating relation database. Install Documentation godoc-xorm gowalker-xorm Quickstart Get started Import packages Define models Create dat......

go-skyblue
2014/03/10
2.6K
0
xorm v0.1.7 发布,Go语言ORM框架

xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 本次版本发布有如下更新: 1.新增IConnectPool接口以及NoneConnectPool, SysConnectPool, SimpleConnectPool三种实现...

lunny
2013/07/03
1K
23
使用xorm和beego快速生成REST-API应用(只写了一半的文章)

框架选择 选择beego是因为它文档比较全, 选择xorm是因为我用了很久,而且它真的很好用. beego的API设计 web应用中,用的最多的还是 json的请求和返回. 参考jas的风格, API的返回值,规定如下, 如...

go-skyblue
2014/03/14
5.2K
0
go-xorm支持外键吗

@lunny 你好,想跟你请教个问题:百度也没有找到答案,请问一下go-xorm支持外键吗?比如在结构体中引用结构体,查询外层结构体之后,内部包含的结构体也被赋值,go-xorm目前支持这个吗?谢谢...

pchenghao
2015/07/27
786
1

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部