创建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. sqler 集成 terraform v0.12 生成资源部署文件

    terraform v0.12 发布了,有好多新功能的添加,包括语法的增强,新函数的引入,更好的开发提示 只是当前对于一些老版本的provider 暂时还不兼容,但是大部分官方的provider 都是 ...

  2. BZOJ1034 ZJOJ2008 泡泡堂BNB

    BZOJ1034 ZJOJ2008 泡泡堂BNB Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表 队由n名选手组成,比赛 ...

  3. Swarm容器集群管理(超详细)

    一.Swarm介绍 Swarm是Docker公司自研发的容器集群管理系统, Swarm在早期是作为一个独立服务存在, 在Docker Engine v1.12中集成了Swarm的集群管理和编排功能.可 ...

  4. Android: 判断当前手机品牌(转)

    参考资料 Android判断手机ROM 正文 有时候需要判断手机系统的ROM,检测ROM是MIUI.EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件查找是否有对应属性 ...

  5. np.stack

  6. window 10 打开某个 窗口常用命令

    1. ctrl +R ,输入:inetcpl.cpl 2. ctrl +R ,输入:services.msc 3. ctrl +R ,输入:msconfig 安装双系统,设置开机引导 4. ctrl ...

  7. Kafka在zookeeper中存储结构和查看方式

    Zookeeper 主要用来跟踪Kafka 集群中的节点状态, 以及Kafka Topic, message 等等其他信息. 同时, Kafka 依赖于Zookeeper, 没有Zookeeper 是 ...

  8. 【python基础】argparse模块

    参考 1. argumentparser-objects: 2. argparse.ArgumentParser()用法解析:

  9. [LeetCode] 265. Paint House II 粉刷房子

    There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...

  10. [LeetCode] 141. Linked List Cycle 链表中的环

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...