生成代码


生成代码使用工具db-reverse

安装工具

  1. go get -u github.com/tal-tech/db-reverse

执行命令

进入db-reverse项目目录

  1. ./xorm reverse mysql 'root:123456@(127.0.0.1:3306)/test?charset=utf8' ./goxorm/
  • 其中root:123456@(127.0.0.1:3306)/test?charset=utf8为指定mysql配置,与go原生sql/driver配置格式一致
  • 命令执行后生成文件在models目录下,每张表对应一个文件
  • 不支持表名、字段名、索引名带’-‘字符,生成时会跳过该表

文件结构

  • 表结构映射结构体类型
  1. type Dbtest struct {
  2. Id int `xorm:"not null pk autoincr INT(11)"`
  3. Param1 int `xorm:"not null default 0 index INT(11)"`
  4. Param2 string `xorm:"not null default '' VARCHAR(256)"`
  5. Param3 string `xorm:"not null default '' CHAR(64)"`
  6. TeAcParam4 string `xorm:"not null default '' VARCHAR(64)"`
  7. }
  • 访问表实体结构及初始化方法
  1. type DbtestDao struct {
  2. torm.DbBaseDao
  3. }
  4. func NewDbtestDao(v ...interface{}) *DbtestDao {
  5. this := new(DbtestDao)
  6. if ins := torm.GetDbInstance("default", "writer"); ins != nil {
  7. this.UpdateEngine(ins.Engine)
  8. } else {
  9. return nil
  10. }
  11. if len(v) != 0 {
  12. this.UpdateEngine(v...)
  13. }
  14. return this
  15. }
  • 索引查询方法
  1. func (this *DbtestDao) Get(mId torm.Param) (ret []Dbtest, err error) {
  2. ret = make([]Dbtest, 0)
  3. this.InitSession()
  4. this.BuildQuery(mId, "id")
  5. err = this.Session.Find(&ret)
  6. return
  7. }
  8. func (this *DbtestDao) GetLimit(mId torm.Param, pn, rn int) (ret []Dbtest, err error) {
  9. ret = make([]Dbtest, 0)
  10. this.InitSession()
  11. this.BuildQuery(mId, "id")
  12. err = this.Session.Limit(rn, pn).Find(&ret)
  13. return
  14. }
  15. func (this *DbtestDao) GetCount(mId torm.Param) (ret int64, err error) {
  16. this.InitSession()
  17. this.BuildQuery(mId, "id")
  18. ret, err = this.Session.Count(new(Dbtest))
  19. return
  20. }

文件更新

工具生成文件需要更改两个位置才可以使用

  • 更改包名为项目内包名(生成时为torm)
  1. package torm //更改此行 如:torm=>mysqlRepo
  2. import (
  3. "github.com/tal-tech/torm"
  4. )
  • 更改库名(生成时为default)
  1. func NewDbtestDao(v ...interface{}) *DbtestDao {
  2. this := new(DbtestDao)
  3. if ins := torm.GetDbInstance("default", "writer"); ins != nil { //更改此行 如:default=>live
  4. this.UpdateEngine(ins.Engine)
  5. } else {
  6. return nil
  7. }
  8. if len(v) != 0 {
  9. this.UpdateEngine(v...)
  10. }
  11. return this
  12. }

更改default名为对应配置文件内库名
live.writer=live_rw:feofefWEFEF#@fdfewoiffjfejlf@tcp(live-writer:3306)/live?charset=utf8mb4

文件引入

将文件引入项目中,文件位置没有要求,推荐创建一个文件夹管理所有mysql表,如msyqlRepo