创建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. 2019.12.11 java方法(类似功能、函数)

    方法的具体语法格式如下: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){     执行语句     ………     return 返回值; }   class D ...

  2. 23-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 加入消息处理

    https://www.cnblogs.com/yangfengwu/p/11203546.html 先做接收消息 然后接着 public class MainActivity extends App ...

  3. C语言博客06-结构体

    1.本章学习总结 1.1 学习内容总结 结构体如何定义.成员如何赋值 1.结构体的一般形式为: struct 结构体名 { 数据类型 成员名1: 数据类型 成员名2: : 数据类型 成员名n: }: ...

  4. 02-线性结构4 Pop Sequence (25 分)

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  5. DML 语言

    数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集. 以INSERT.UPDATE.DELETE三种指令为核心,分别 ...

  6. [HAOI2018]染色(NTT)

    前置芝士 可重集排列 NTT 前置定义 \[\begin{aligned}\\ f_i=C_m^i\cdot \frac{n!}{(S!)^i(n-iS)!}\cdot (m-i)^{n-iS}\\ ...

  7. hdfs、yarn集成kerberos

    1.kdc创建principal 1.1.创建认证用户 登陆到kdc服务器,使用root或者可以使用root权限的普通用户操作: # kadmin.local -q “addprinc -randke ...

  8. hdoj - 1181 变形课

    Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  9. git之fatal: Could not read from remote repository

    问题背景:在git bash中使用hexo g -d命令进行文章发布 详细错误信息: fatal: Could not read from remote repository. Please make ...

  10. hdu1501 Zipper[简单DP]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu1501 题干 代码和解释 最优子结构分析:设这三个字符串分别为a.b.c,如果a.b可以组成c,那么c的最后一个字母必定来自a或者b的最后一个 ...