创建xorm引擎

//在xorm里面,可以同时存在多个Orm引擎,一个Orm引擎称为Engine,
//一个Engine一般只对应一个数据库。
//Engine通过调用`xorm.NewEngine`生成,如: package main import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"log"
) func main() {
var err error
/*[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]*/
//一般情况下如果只操作一个数据库,只需要创建一个engine即可。engine是GoRoutine安全的。 engine, err = xorm.NewEngine("mysql", "root:123456@/test")
if err != nil {
log.Fatal(err)
return
} //创建完成engine之后,并没有立即连接数据库
//此时可以通过engine.Ping()来进行数据库的连接测试是否可以连接到数据库。
err = engine.Ping()
if err != nil{
log.Fatal(err)
return
}
//[xorm] [info] 2019/05/25 13:50:04.228243 PING DATABASE mysql

名称映射规则

  • 职责

    结构体名称---------------------------表名

    结构体field---------------------------表字段的名称

  • 由core.IMapper接口的实现者来管理,xorm内置了三种IMapper实现

    • core.SnakeMapper

      支持struct为驼峰式命名,表结构为下划线命名之间的转换

    • Core.SameMapper

      支持结构体名称和对应的表名称以及结构体field名称与对应的表字段名称相同的命名

    • core.GonicMapper

      SnakeMapper很类似,但是对于特定词支持更好,比如ID会翻译成id而不是i_d。

  • 当前SnakeMapper为默认值,如果需要改变时,在engine创建完成后使用

    engine.SetMapper(core.SameMapper{})
  • 如果你使用了别的命名规则映射方案,也可以自己实现一个IMapper。

    表名称和字段名称的映射规则默认是相同的,当然也可以设置为不同,如:

    engine.SetTableMapper(core.SameMapper{})
    engine.SetColumnMapper(core.SnakeMapper{})

前缀映射,后缀映射

package main

import (
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/core"
"github.com/go-xorm/xorm"
"log"
) var engine *xorm.Engine type User struct {
ID int `xorm:"id"`
Name string `xorm:"name"`
Age int `xorm:"age"`
} type User1 struct {
ID int `xorm:"id"`
Name string `xorm:"name"`
Age int `xorm:"age"`
} func main() {
var err error
engine, err = xorm.NewEngine("mysql", "root:123456@/test")
if err != nil {
log.Fatal(err)
return
} /*通过 `core.NewPrefixMapper(core.SnakeMapper{}, "prefix")`
可以创建一个在SnakeMapper的基础上在命名中添加统一的前缀,
也可以把SnakeMapper{}换成SameMapper或者你自定义的Mapper。*/ //例如,如果希望所有的表名都在结构体自动命名的基础上加一个前缀而字段名不加前缀
//则可以在engine创建完成后执行以下语句(只针对新建的表,不能改变之前建立的表的前缀):
tbMapper := core.NewPrefixMapper(core.SnakeMapper{}, "prefix_")
engine.SetTableMapper(tbMapper) //执行之后,结构体 `type User struct` 默认对应的表名就变成了 `prefix_user` 了
//而之前默认的是 `user`
err = engine.CreateTables(User{})
if err != nil {
log.Fatal(err)
return
} /* 通过 `core.NewSufffixMapper(core.SnakeMapper{}, "suffix")`
可以创建一个在SnakeMapper的基础上在命名中添加统一的后缀,
当然也可以把SnakeMapper换成SameMapper或者你自定义的Mapper。*/
tMapper := core.NewSuffixMapper(core.SnakeMapper{}, "_suffix")
engine.SetTableMapper(tMapper) err = engine.CreateTables(User1{})
if err != nil {
log.Fatal(err)
return
}
}

参考:http://gobook.io/read/github.com/go-xorm/manual-zh-CN/

xorm实例-创建xorm,映射的更多相关文章

  1. 如何修改Docker已运行实例的端口映射

    如何修改Docker已运行实例的端口映射 Docker的端口映射,往往出现在两个阶段需要处理: 1.是在docker启动前就已经确定好,哪个docker实例映射哪个端口(往往这个情况比较,需要提前做规 ...

  2. 使用ZwMapViewOfSection创建内存映射文件总结

    标 题: [原创]使用ZwMapViewOfSection创建内存映射文件总结 作 者: 小覃 时 间: 2012-06-15,02:28:36 链 接: http://bbs.pediy.com/s ...

  3. [Java] 实例创建的步骤

    创建类的一个实例时,按照下面步骤进行创建: 1. 给当前类及其父.祖类的所有成员字段分配空间,并给它们赋予默认值 2. 开始执行当前类的构造器 3. 如果当前类有父类,则对父类创建一个实例:从第 2 ...

  4. DB2数据库实例创建与删除 学习笔记

    以root身份执行 $DB2HOME/instance/db2idrop -f 实例名,注意一定要加-f,否则不会删除实例下面sqllib文件.如果不幸忘了,执行db2icrt,会报sqllib文件存 ...

  5. HTML <img>标签 创建图像映射

    初级前端一枚 下面代码是在图片上创建图像映射 自己整理了下 做个笔记 希望也可以帮助后来学习的朋友! <map name="planetmap"> <area s ...

  6. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

  7. C 语言实例 - 创建各类三角形图案

    C 语言实例 - 创建各类三角形图案 创建三角形图案. 实例 - 使用 * 号 #include <stdio.h> int main() { int i, j, rows; printf ...

  8. hibernate课程 初探单表映射1-9 创建关系映射文件

    创建关系映射文件:(把实体类映射成一个表) 1 右键src==>new==>other==>hibernate==>hbm.xml==>Student==>Fini ...

  9. Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查

    Django Django的ORM简介 数据库连接配置 模型的创建与映射 数据库的增删改查 增数据 查数据及补充 改数据 删数据   Django的ORM系统分析 ORM概念:对象关系映射(Objec ...

随机推荐

  1. java 练习(公司年销售额求和)

    /*B:公司年销售额求和 某公司按照季度和月份统计的数据如下:单位(万元) 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 */ int ...

  2. rpmlint 方便的rpm spec 以及rpm 文件检查工具

    rpmlint 可以方便的让我们检查rpm spec 的信息,给予我们提示以及改进,同时也支持对于rpm 文件处理 安装 yum install -y rpmlint 使用 spec 检查 rpmli ...

  3. 51 NOD 1239 欧拉函数之和(杜教筛)

    1239 欧拉函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究 ...

  4. javascript巧用注释保存html文本结构

    在js中,肯定会遇到js代码里面有html接口的时候,骚年们都有哪些写法? 刚学JS的写法: <script> var strHtml="<div id=\"te ...

  5. Python 元类使用讲解

    我要一大群的类都具有一种特点,我怎么给他们加上呢?模板嘛,我从这个模板创建一群类不就OK了?那就需要元类了. 定义一个元类(就是一个类的模板!莫多想,还要记住这是类级别的,不是对象级别的!):代码如下 ...

  6. 东软HIS系统_打印发票提示“打印机报错!对访问XXX的设置无效”解决办法

    发票打印报错 添加打印机,端口跟物理打印机同一个. 添加 MZJSFP,ZYJSFP,YJJFP三个打印机 打印发票错位 设置自定义纸张 MZJSFP 宽30.40CM 高12.94CM ZYJSFP ...

  7. Verticles for Web Application

    Core Concept: HTTP-Centered EventBus Event, EventLoop, Executor, Handler, HTTPContext, Callback on E ...

  8. 【数值分析】Python实现Lagrange插值

    一直想把这几个插值公式用代码实现一下,今天闲着没事,尝试尝试. 先从最简单的拉格朗日插值开始!关于拉格朗日插值公式的基础知识就不赘述,百度上一搜一大堆. 基本思路是首先从文件读入给出的样本点,根据输入 ...

  9. SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card【学习笔记】

    SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card 打印了如下的log: - ::>[ after ms - :: ...

  10. bookdown - 撰写和发表自己的网络书籍/文档

    BOOKDOWN官网 - bookdown上有不少人发布了自己的电子书 bookdown-demo (一个demo,github源码)- Rstudio出品,Yihui Xie开发,著名单细胞课程在用 ...