Go 使用xorm操作mysql详情

目录
  • xorm
  • 安装
  • 生成数据结构 struct
  • 使用 xorm

xorm

官方介绍:xorm 是一个简单而强大的 Go 语言 ORM 库。

通过它可以使数据库操作非常简便。

xorm 的目标并不是让你完全不去学习 SQL,我们认为 SQL 并不会为 ORM 所替代,但是 ORM 将可以解决绝大部分的简单 SQL 需求。

xorm 支持两种风格的混用。

xorm 还提供了工具,通过 reverse 命令根据数据库的表结构生成对应的 struct,省去了人工组织代码的工作,十分方便。官方地址:https://xorm.io/

安装

浏览 xorm 的 github 地址,我们要下载 2 个包,https://github.com/go-xorm

1、xorm 驱动包,我们使用 xorm 的核心包 2、cmd 工具包,用于使用 reverse 命令生成数据表对应的 struct

通过 go get 命令分别下载 2 个包
go get github.com/go-xorm/xorm``go get github.com/go-xorm/cmd/xorm
下载完成后 github.com 文件夹下会出现 go-xorm 包

生成数据结构 struct

本地数据库 test 有 2 张数据表,doctor_tb 和 user_tb, 数据结构如下:

我们现在就来生成这 2 张数据表的结构模型。

1、在任意项目下新建一个文件夹 xorm_models,文件名没有规定,为了存放生成的代码文件。
2、拷贝 cmd 工具包中的摸板目录到 xorm_models 下,在文件目录github.com\go-xorm\cmd\xorm\templates\goxorm

config 是生成的配置信息,struct.go.tpl 是数据摸板,允许自定义,可以根据自己的项目需求,修改摸板。一般不需要修改。

3、打开 cmd 命令行窗口,进入 xorm_models 目录下,执行 reverse 命令:xorm reverse [数据库类型] [数据库连接串] [模板目录]xorm reverse mysql root:112233@tcp(127.0.0.1:3305)/test?charset=utf8 templates/goxorm  

4、数据结构代码会自动生成在 xorm_models/models 目录下。

我们能看到生成了和表名同名的 2 个数据结构文件 doctor_tb.go 和 user_tb.go

package models  
import (  
    "time"  
)  
type DoctorTb struct {  
    Id      int       `xorm:"not null pk autoincr INT(11)"`  
    Name    string    `xorm:"default '' comment('姓名') VARCHAR(50)"`  
    Age     int       `xorm:"default 0 comment('年龄') INT(11)"`  
    Sex     int       `xorm:"default 0 comment('性别') INT(11)"`  
    Addtime time.Time `xorm:"DATETIME"`  
}  

使用 xorm

xorm 支持链式的写法

engine.Where("age > ?", 40).Or("name like ?", "林%").OrderBy("Id desc").Find(&docList2) 也支持直接执行 sql 语句engine.SQL("select * from doctor_tb where age > ?", 40).Find(&docList4)

附上增删改查事务的 demo 例子,代码里都有注释,很容易看懂。xorm 的封装比较友好,只要熟悉 sql 语句,即便不看文档,也能顺利的使用各种关键字。

package main  

import (  
    "fmt"  
    _ "github.com/go-sql-driver/mysql"  
    "github.com/go-xorm/xorm"  
    "goShare/xorm_models/models"  
    "time"  
)  

func main() {  

    var engine *xorm.Engine  
    //连接数据库  
    engine, err := xorm.NewEngine("mysql", "root:112233@tcp(127.0.0.1:3305)/test?charset=utf8")  
    if err != nil {  
        fmt.Println(err)  
        return  
    }  
    //连接测试  
    if err := engine.Ping(); err != nil {  
        fmt.Println(err)  
        return  
    }  
    defer engine.Close() //延迟关闭数据库  
    fmt.Println("数据库链接成功")  

    //查询单条数据  
    var doc models.DoctorTb  
    b, _ := engine.Where("name = ?", "钟南山").Get(&doc)  
    if b {  
        fmt.Println(doc)  
    } else {  
        fmt.Println("数据不存在")  
    }  

    //查询单条数据方式 2 会根据结构体的  
    doc2 := models.DoctorTb{Name: "钟南山"}  
    b, _ = engine.Get(&doc2)  
    fmt.Println(doc2)  

    //新增数据  
    doc3 := models.DoctorTb{0, "王医生", 48, 1, time.Now()}  
    i3, _ := engine.InsertOne(doc3)  
    fmt.Println("新增结果:", i3)  

    //查询列表  
    docList := make([]models.DoctorTb, 0)  
    engine.Where("age > ? or name like ?", 40, "林%").Find(&docList)  
    fmt.Println("docList:", docList)  

    //查询列表方式 2  
    docList2 := make([]models.DoctorTb, 0)  
    engine.Where("age > ?", 40).Or("name like ?", "林%").OrderBy("Id desc").Find(&docList2)  
    fmt.Println("docList2:", docList2)  

    //查询分页  
    docList3 := make([]models.DoctorTb, 0)  
    page := 0     //页索引  
    pageSize := 2 //每页数据  
    limit := pageSize  
    start := page * pageSize  
    totalCount, err := engine.Where("age > ? or name like ?", 40, "林%").Limit(limit, start).FindAndCount(&docList3)  
    fmt.Println("总记录数:", totalCount, "docList3:", docList3)  

    //直接用语句查询  
    docList4 := make([]models.DoctorTb, 0)  
    engine.SQL("select * from doctor_tb where age > ?", 40).Find(&docList4)  
    fmt.Println("docList4:", docList4)  

    //删除  
    docDel := models.DoctorTb{Name: "王医生"}  
    iDel, _ := engine.Delete(&docDel)  
    fmt.Println("删除结果:", iDel)  

    //删除方式 2  
    engine.Exec("delete from doctor_tb where Id = ?", 3)  

    //更新数据  
    doc5 := models.DoctorTb{Name: "钟医生"}  
    //更新数据 ID 为 2 的记录名字更改为“钟医生”  
    iUpdate, _ := engine.Id(2).Update(&doc5)  
    fmt.Println("更新结果:", iUpdate)  

    //指定表名查询。Table()  
    user := models.UserTb{Id: 2}  
    b, _ = engine.Table("user_tb").Get(&user)  
    fmt.Println(user)  

    //事务  
    session := engine.NewSession()  
    defer session.Close()  
    err = session.Begin()  
    _, err = session.Exec("delete from doctor_tb where Id = ?", 6)  
    if err != nil {  
        session.Rollback()  
        return  
    }  
    _, err = session.Exec("delete from user_tb where Id = ?", 10)  
    if err != nil {  
        session.Rollback()  
        return  
    }  
    err = session.Commit()  
    if err != nil {  
        return  
    }  
    fmt.Println("事务执行成功")  
}  

总结:
归纳下使用流程 1、下载 xorm 包和 cmd 工具包 2、复制 cmd 工具包里的模板代码文件夹至生成目录底下 3、使用 reverse 生成数据结构代码,省去苦力活 4、实例引擎
xorm.NewEngine()

5、痛快的调用

demo 里提供了我们开发业务上常用的增,删,改,查单条数据,查列表,查分页,事务等内容。

到此这篇关于Go 使用xorm操作mysql详情的文章就介绍到这了,更多相关Go 使用xorm操作mysql内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用go xorm来操作mysql的方法实例

    在golang中要实现对数据库的操作, 一个比较好用的方式就是使用XORM,xorm是一个简单而强大的Go语言ORM库,通过它可以使数据库操作非常简便. 在xorm里面,可以同时存在多个ORM引擎,一个ORM引擎称为Engine,一个Engine一般只对应一个数据库. golang的连接池配置 这里初始化一个全局的xorm.Engine对象, xorm.Engine通过调用xorm.NewEngine生成在很多其他的API都需要传入该对象作为参数. 这里需要理解这里设定的3个参数的意义: Set

  • Go 使用xorm操作mysql详情

    目录 xorm 安装 生成数据结构 struct 使用 xorm xorm 官方介绍:xorm 是一个简单而强大的 Go 语言 ORM 库. 通过它可以使数据库操作非常简便. xorm 的目标并不是让你完全不去学习 SQL,我们认为 SQL 并不会为 ORM 所替代,但是 ORM 将可以解决绝大部分的简单 SQL 需求. xorm 支持两种风格的混用. xorm 还提供了工具,通过 reverse 命令根据数据库的表结构生成对应的 struct,省去了人工组织代码的工作,十分方便.官方地址:ht

  • Go 使用xorm操作mysql详情

    目录 xorm 安装 生成数据结构 struct 使用 xorm xorm 官方介绍:xorm 是一个简单而强大的 Go 语言 ORM 库. 通过它可以使数据库操作非常简便. xorm 的目标并不是让你完全不去学习 SQL,我们认为 SQL 并不会为 ORM 所替代,但是 ORM 将可以解决绝大部分的简单 SQL 需求. xorm 支持两种风格的混用. xorm 还提供了工具,通过 reverse 命令根据数据库的表结构生成对应的 struct,省去了人工组织代码的工作,十分方便.官方地址:ht

  • node.js操作mysql简单实例

    上篇文章介绍了node.js操作redis的简单实例,这里介绍如何操作mysql. 安装 安装mysql模块 cnpm install mysql 一个例子 新建一个mysql.js的文件,代码如下: 连接配置 1.host:主机地址 (默认:localhost) 2.user:用户名 3.password:密码 4.port:端口号 (默认:3306) 5.database:数据库名 6.charset:连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写) 7.lo

  • R语言实现操作MySQL数据库

    用R语言做数据分析时,常常需要从多种数据源取数据,其中数据库是非常常见的数据源.用R操作MySQL数据库,可以说是数据分析师必备的技能了,本文介绍RMySQL包,可以在R语言中对数据库进行增删改查的操作. 软件版本 win10 64bit r3.6.1 rstudio 1.2 RMySQL 0.10.20 安装包 install.packages('RMySQL') 创建连接 用dbConnect函数创建连接,驱动类型设置为MySQL(),用户名user.密码password.主机host.端口

  • gORM操作MySQL的实现

    ORM 框架 ORM:Object  Relational   Mapping  -- 对象关系映射. 作用: 通过操作结构体对象,来达到操作数据库表的目的. 通过结构体对象,来生成数据库表. 优点: SQL有可能 比较复杂.(Oracle --- 子查询 -- 嵌套)ORM 操作数据库,不需要使用 SQL 不同开发者,书写的 SQL 语句执行效率不同. go语言支持的 ORM: gORM:gORM中文文档 xORM: gorm 连接数据库.建表 回顾MySQL 确认mysql服务启动: ps

  • django中操作mysql数据库的方法

    目录 1.准备工作(django连接数据库) 2.django操作数据库(ORM) 2.1 ORM简介 2.2 创建表和字段 2.3 字段的增删改查 2.4 单表数据的增删改查 2.4.1单表数据的查询 2.4.2单表数据的增加 2.4.3单表数据的修改 2.4.4单表数据删除 2.4.5补充13条单表查询 2.4.6 神奇的双下划线查询 2.5 多表数据操作 2.5.1 orm创建表关系 2.5.2 一对多关系的增删改 2.5.3 多对多关系的增删改 2.5.4 多表的查询操作 2.6 字段类

  • ASP.NET操作MySql数据库的实例代码讲解

    一.把MySql.Data.dll放到BIN目录下. 二.这是aspx.cs的全部源码,修改参数直接运行即可!   using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; publ

  • php简单操作mysql数据库的类

    本文实例讲述了php简单操作mysql数据库的类.分享给大家供大家参考.具体如下: <?php /** * Database class * * @version: 2.2 * @revised: 27 may 2007 * **/ class Database { var $host; var $name; var $user; var $pass; var $prefix; var $linkId; function Database($mysql) { foreach($mysql as

  • Python操作MySQL数据库9个实用实例

    在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 实例 1.取得 MYSQL 的版本 # -*- coding: UTF-8 -*- #安装 MYSQL DB for python import MySQLdb as mdb con

随机推荐