使用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 工具, 假如环境变量。

这时候,执行 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 , 免去了手写的繁琐过程。

总结

照例总结一波,引用看到过一句话:

如果一个工具能让我节省 1s 的时间,我愿意花一天的时间去找或者开发这个工具!

使用xorm工具,根据数据库自动生成 go 代码的更多相关文章

  1. Golang xorm工具,根据数据库自动生成 go 代码

    使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型.因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段 ...

  2. 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法

    之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...

  3. 使用mybatis-generator工具自动生成mybatis代码

    使用mybatis-generator工具自动生成mybatis代码 步骤如下: 1.引入maven  依赖,在项目pom.xml文件中添加 <plugin> <groupId> ...

  4. Intellij IDEA 根据数据库自动生成pojo和hbm

    新建一个项目,每次写hibernate部分,就觉得pojo和hbm.xml部分很蛋疼.今天搜索了半天,终于知道如何根据数据库自动生成了. Intellij IDEA14创建maven时并不能勾选各种支 ...

  5. (jdbc)取得数据库自动生成的主键方法

    一些类,在前面的博客中有,就不重复了 public class Test2 { TestDAO t=new TestDAO(); /*前提是数据表的主键是自动增加的, *取得数据库自动生成的主键 * ...

  6. 使用T4为数据库自动生成实体类

    T4 (Text Template Transformation Toolkit) 是一个基于模板的代码生成器.使用T4你可以通过写一些ASP.NET-like模板,来生成C#, T-SQL, XML ...

  7. javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  8. javaweb(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  9. javaweb基础(37)_mysql数据库自动生成主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

随机推荐

  1. windows上定时执行php文件

    <?php $fp = fopen("E:/wwwroot/test/plan.txt", "w+"); fwrite($fp, date("Y ...

  2. springMVC项目国际化(i18n)实现方法

    SpringMVC项目国际化(i18n)实现方法 按照作息规律,每周五晚必须是分享知识的时间\(^o^)/~,这周讲点儿啥呢,项目需要逼格,咱们国际化吧(* ̄rǒ ̄)~,项目中碰到这类需求的童鞋可能并 ...

  3. Phpcms整理

    一.先去官网下载一个pc(http://www.phpcms.cn/)进行安装 把下载的pc包放在服务器www目录下: 在地址栏访问localhost/project/install/install. ...

  4. 【NOI模拟】谈笑风生(主席树)

    题目描述 设 T 为一棵有根树,我们做如下的定义: 设 a 和 b 为 T 中的两个不同节点.如果 a 是 b 的祖先,那么称 “ a 比 b 不知道高明到哪里去了 ” . 设 a 和 b 为 T 中 ...

  5. (转)Linux修改SSH登录欢迎语

    场景:感觉这样做挺个性的,做个记录! 1 Linux修改SSH的欢迎语 众所周知,Linux系统并没有像Windows一样自带远程桌面连接,虽然可以通过后期安装VNC之类的软件来弥补这个缺点,但用了L ...

  6. Experience of Python Learning Week 1

    1.The founder of python is Guido van Rossum ,he created it on Christmas in 1989, smriti of ABC langu ...

  7. 浅析python 的import 模块(转)

    摘要: 学习python有几天了,对import一直不是很清楚,和C里面的include是否一样,重复引入有问题么?搜索路径是怎样的?整理解决下我的疑问. 一 模块的搜索路径 模块的搜索路径都放在了s ...

  8. phpunit实践笔记

    phpunit成为单元测试的代名词已成为共识, 但很多在实际编写测试过程中遇到的很多问题通过手册.网上搜索都很难找到相关资料, 大部分都得通过查看源代码和实践的代码经验解决.欢迎大家拍砖.(在此之前请 ...

  9. python中数字类型与处理工具

    python中的数字类型工具 python中为更高级的工作提供很多高级数字编程支持和对象,其中数字类型的完整工具包括: 1.整数与浮点型, 2.复数, 3.固定精度十进制数, 4.有理分数, 5.集合 ...

  10. 安徽省2016“京胜杯”程序设计大赛_B_阵前第一功

    阵前第一功 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 63 Accepted: 29 Description A国每个 ...