zoukankan      html  css  js  c++  java
  • xorm入门

    一、xorm介绍

    xorm是一个Go语言的ORM库。通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,xorm可以解决绝大部分的简单SQL需求。

    二、环境准备

    (1)下载xorm和mysql驱动

    $ go get github.com/go-xorm/cmd/xorm
    $ go get -u github.com/go-sql-driver/mysql
    1
    2
    (2)创建数据库

    $ create database lottery
    $ use lottery
    1
    2
    创建完数据库后,导入以下数据库脚本。

    DROP TABLE IF EXISTS `lt_user`;
    CREATE TABLE `lt_user` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名',
    `blacktime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '黑名单限制到期时间',
    `realname` varchar(50) NOT NULL DEFAULT '' COMMENT '联系人',
    `mobile` varchar(50) NOT NULL DEFAULT '' COMMENT '手机号',
    `address` varchar(255) NOT NULL DEFAULT '' COMMENT '联系地址',
    `sys_created` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
    `sys_updated` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
    `sys_ip` varchar(50) NOT NULL DEFAULT '' COMMENT 'IP地址',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=40652 DEFAULT CHARSET=utf8;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (3)新建一个Go工程,新建一个models文件夹,然后在文件夹下定义LtUser结构体。

    type LtUser struct {
    Id int `json:"id" xorm:"not null pk autoincr INT(10)"`
    Username string `json:"username" xorm:"not null default '' comment('用户名') VARCHAR(50)"`
    Blacktime int `json:"blacktime" xorm:"not null default 0 comment('黑名单限制到期时间') INT(10)"`
    Realname string `json:"realname" xorm:"not null default '' comment('联系人') VARCHAR(50)"`
    Mobile string `json:"mobile" xorm:"not null default '' comment('手机号') VARCHAR(50)"`
    Address string `json:"address" xorm:"not null default '' comment('联系地址') VARCHAR(255)"`
    SysCreated int `json:"sys_created" xorm:"not null default 0 comment('创建时间') INT(10)"`
    SysUpdated int `json:"sys_updated" xorm:"not null default 0 comment('修改时间') INT(10)"`
    SysIp string `json:"sys_ip" xorm:"not null default '' comment('IP地址') VARCHAR(50)"`
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    结构体中的每个属性与lt_user表的字段一一对应。

    三、第一个Hello World

    (1)创建xorm.Engine实例。

    // 构建一个xorm.Engine实例
    func NewDbEngine() *xorm.Engine{
    // url格式:[username]:[password]@tcp([ip]:[port])/[database]?charset=utf8
    dbUrl := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
    "root",
    "root",
    "127.0.0.1",
    3306,
    "lottery")
    // 创建Engine实例
    engine, err := xorm.NewEngine("mysql", dbUrl)
    if err != nil {
    panic(err)
    }
    // 显示sql
    engine.ShowSQL(true)
    return engine
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    (2)定义测试方法

    func main() {
    // 创建xorm.Engine实例
    dbEngine := NewDbEngine(http://www.my516.com)
    // 定义一个切片,保存所有用户
    datalist := make([]models.LtUser, 0)
    // 按照id的倒序查询用户
    err := dbEngine.Desc("id").Find(&datalist)
    // 判断查询是否成功
    if err != nil {
    panic(err)
    }
    // 遍历输出结果
    for i := range datalist {
    fmt.Printf("%v ", datalist[i])
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    (3)导入mysql驱动

    _ "github.com/go-sql-driver/mysql"
    1
    (4)运行测试,效果如下图所示


    四、反向生成实体

    先进入工程所在路径,然后执行以下命令。

    # 命令格式
    xorm reverse mysql [username]:[password]@/[database]?charset=utf8 [template]

    例如:
    xorm reverse mysql root:root@/fox?charset=utf8 templates/goxorm
    1
    2
    3
    4
    5
    上面命令会把数据库表反向生成models/**的实体。
    ---------------------

  • 相关阅读:
    每日总结2.26
    《梦断代码》阅读笔记三
    每日总结2.25
    每日总结2.24
    每日总结2.23
    每日总结2.22
    每日总结2.19
    《梦断代码》阅读笔记二
    Java-11 形参和实参
    Java-10 final用法
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11235440.html
Copyright © 2011-2022 走看看