原创:转载请标明出处:
https://blog.csdn.net/ming2316780/article/details/86499344
本文出自:【iGoogle.ink的博客】

Golang 调用MySQL存储过程

最近写项目发现,很多逻辑业务的实现,写到数据库的存储过程中,然后调用,真的非常方便。后端代码量大大减少,最重要的是性能高,速度快!

由于常用,封装整理了:jorm,更加方便调用存储过程(附地址如下)

  • https://github.com/iGoogle-ink/jorm

引用说明:项目使用数据库ORM xorm(附地址)

  • https://github.com/go-xorm/xorm

存储过程代码 demo:

  • 数据库名:db_test
  • 表名:contact
create table contact
(user_id      int auto_incrementprimary key,real_name    varchar(5)  default '' null,age          int         default 0  null,phone_number varchar(15) default '' null,home_address varchar(50) default '' null,create_time  datetime               null
);insert  into contact (real_name, age, phone_number, home_address, reate_time) values ('Jerry',28,'18017448610','上海市','2019-08-08 15:30');
  • 存储过程 demo
-- 创建存储过程
createdefiner = jerry@`%` procedure query_contact(IN i_name varchar(10), OUT o_user_id int, OUT o_real_name varchar(10),OUT o_age int, OUT o_phone_number varchar(15),OUT o_address varchar(50), OUT o_create_time datetime)comment '根据名字和性别查询学生信息'
begin-- 搜索信息并赋值select contact.user_id      as user_id,contact.real_name    as real_name,contact.age          as age,contact.phone_number as phone_number,contact.home_address as home_address,contact.create_time  as create_timefrom contactwhere contact.real_name = i_name;-- 返回结果需要返回的结果
#     select o_user_id, o_real_name, o_age, o_phone_number, o_address;
end;

Golang代码 :

jorm使用手册

安装

$ go get -u github.com/iGoogle-ink/jorm

一、初始化连接MySQL数据库

在项目运行init中初始化

err := jorm.InitMySQL("root:password@tcp(jerry.igoogle.ink:3306)/db_test?charset=utf8&parseTime=true&loc=Local")
if err != nil {fmt.Println("err:", err)}

二、xorm功能

xorm原有的功能,都还将保留支持

type Contact struct {UserId      int    `json:"user_id"`Name        string `json:"name" jorm:"real_name" xorm:"real_name"`Age         int    `json:"age"`PhoneNumber string `json:"phone_number"`HomeAddress string `json:"home_address"`CreateTime  string `json:"create_time"`
}//jorm.MySQL() 默认返回 *xorm.Engine
//查询columns包含的字段
columns := []string{"real_name", "age", "phone_number", "home_address"}
contact := new(Contact)_, err = jorm.MySQL().Where("real_name = ?", "付明明").Cols(columns...).Get(contact)
if err != nil {fmt.Println("err:", err)
} else {fmt.Println("contact:", contact)
}

输出结果为:

contact: {0 付明明 29 18017448610 上海市杨浦区 }

三、调用存储过程返回 []map[string]string 数组

result, err := jorm.CallProcedure("query_contact", 1, 6).InParams("付明明").Query()
if err != nil {fmt.Println("err:", err)
}
for _, v := range result {fmt.Println(v)
}

输出结果为:

map[age:29 create_time:2019-05-10 12:31:59 home_address:上海市杨浦区 phone_number:18017448610 real_name:付明明 user_id:1]

四、调用存储过程赋值到结构体

结构体内字段默认为驼峰命名转小写字母加 _(例:HelloWorld 转换为 hello_world)

驼峰命名转换后的字段,要与数据库column字段相同(例:数据库column字段为 phone_number,结构体字段应为 PhoneNumber)

字段后加标记,为数据库column字段(例:如下Contact结构体Name字段,加标记后则默认数据库column字段为jorm标记中的字段 real_name)

type Contact struct {UserId      int    `json:"user_id"`Name        string `json:"name" jorm:"real_name"`Age         int    `json:"age"`PhoneNumber string `json:"phone_number"`HomeAddress string `json:"home_address"`CreateTime  string `json:"create_time"`
}contact := new(Contact)
has, err := jorm.CallProcedure("query_contact", 1, 6).InParams("付明明").Get(contact)
if err != nil {fmt.Println("err:", err)
}
if has {fmt.Println("contact:", *contact)
} else {fmt.Println("没有查到需要的数据")
}

输出结果为:

contact: {1 付明明 29 18017448610 上海市杨浦区 2019-05-10 12:31:59}

五、调用存储过程赋值到切片

结构体内字段默认为驼峰命名转小写字母加 _(例:HelloWorld 转换为 hello_world)

驼峰命名转换后的字段,要与数据库column字段相同(例:数据库column字段为 phone_number,结构体字段应为 PhoneNumber)

字段后加标记,为数据库column字段(例:如下Contact结构体RealName字段,加标记后则默认数据库column字段为标记中的字段 name)

type Contact struct {UserId      int    `json:"user_id"`Name        string `json:"name" jorm:"real_name"`Age         int    `json:"age"`PhoneNumber string `json:"phone_number"`HomeAddress string `json:"home_address"`CreateTime  string `json:"create_time"`
}contactList := make([]Contact, 0)err = jorm.CallProcedure("query_contact", 1, 6).InParams("付明明").Find(&contactList)
if err != nil {fmt.Println("err:", err)
}
fmt.Println("contactList:", contactList)

输出结果为:

contactList: [{1 付明明 29 18017448610 上海市杨浦区 2019-05-10 12:31:59} {2 付明明 28 18017448610 上海市杨浦区2 2019-08-08 15:51:18} {3 付明明 30 18017448610 上海市杨浦区3 2019-08-08 15:53:12}]

以上只是做了个最简单的demo,如果遇到更复杂的搜索情况,靠存储过程实现,效率非常可观!

Golang 调用MySQL存储过程相关推荐

  1. go mysql存储过程_Golang 调用MySQL存储过程

    Golang 调用MySQL存储过程 最近写项目发现,很多逻辑业务的实现,写到数据库的存储过程中,然后调用,真的非常方便.后端代码量大大减少,最重要的是性能高,速度快! 引用说明:项目使用数据库ORM ...

  2. hibernate mysql 存储过程_hibernate调用mysql存储过程

    hibernate调用mysql存储过程 在最近的项目中,碰到一小段数据库数据分析的程序,需要结合多张表联合查询或涉及到子查询,项目主要采用的java ee开发,使用了hibernate框架,由于这些 ...

  3. vb获得mysql的值,VB.NET调用MySQL存储过程并获得返回值的方法

    本文实例讲述了VB.NET调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体实现方法如下: Dim myConnectionString As String = "Data ...

  4. jsp实现mysql存储过程_JSP调用MySQL存储过程收藏

    JSP调用MySQL存储过程收藏 1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列.不带参数的 call 转义序列的语法如下所示: {c ...

  5. mysql存储过程 php_PHP调用MYSQL存储过程实例

    说一下 在PHP页面中调用MYSQL存储过程的方法 以下是几个例子 仅供参考 实例一:无参的存储过程 $conn = mysql_connect('localhost','root','root') ...

  6. c++调用mysql存储过程_C++中ADO调用MySQL存储过程失败,诡异的语法异常,求解中,附源码...

    C++中ADO调用mysql存储过程失败,诡异的语法错误,求解中,附源码 不管怎么调整,死活都出现下面的错误 C++ADO代码我实在找不到什么错误了,难道是MySQL有什么问题,或者有其他需要注意的地 ...

  7. mysql inputoutput_PHP:同时使用INPUT和OUTPUT参数(不“ INOUT”)调用MySQL存储过程

    从PHP,我想在MySQL中调用存储过程.该过程采用输入 和 输出参数- 而不是 " INOUT" 参数. 对于一个简单的示例,说我在MySQL中具有以下存储过程: DELIMIT ...

  8. jdbc mysql 存储过程查询数据_jdbc调用mysql存储过程实现代码

    1. 创建存储过程 建立一个MySQL的存储过程 add_pro 复制代码 代码如下: delimiter // drop procedure add_pro // create procedure ...

  9. SpringBoot Mybatis注解调用Mysql存储过程并接收多个OUT结果集(多个mode=IN和mode=OUT参数)

    其他同学提供的方式大部分都是Map接收调用mysql存储过程返回OUT结果集,要么游标,要么单个OUT,然后再次加工成想要的对象.涉及到直接用注解实现自动转换OUT参数结果集为对象时,都是忽略带过. ...

最新文章

  1. linux 查看锁机时间,3分钟短文|Linux 登陆痕迹查看,last 锁定所有可疑对象
  2. linux脚本读取mssql数据库,WebShell通过SQL语句管理MSSQL
  3. 大多数比特币 混币交易属合法交易
  4. elasticsearch,python包pyes进行的处理
  5. 理想内插_理想ONE性能测试:6.35秒就能破百,售价只要宝马X5一半
  6. 划分子网和构造超网的学习
  7. VTK:隐式函数之ImplicitQuadric
  8. Mysql数据库(七)——mysql高阶语句(上)
  9. TabError- inconsistent use of tabs and spaces in indentation 查验及解决方法
  10. 对于IDEA 导入eclipse项目后 没有办法启动部署 以及javax.servlet.http不存在
  11. 学习:如何把备份的bak还原到新的数据库(转)
  12. 【shell】echo不显示变量中的多个空格
  13. c mysql事务回滚_MYSQL事务回滚的2个问题分析
  14. 关于贴片机如何获取元件的位置思考
  15. Linux之Iptables防火墙管理与配置~
  16. 计算机协会游戏方案,计算机协会社团各月工作总结及工作计划
  17. 经济学的思维方式 [Basic Economics A Common Sense Guide to the Econom]
  18. Eclipse-WTP什么意思?
  19. 汤姆猫代码python_iOS开发:纯代码实现汤姆猫小游戏
  20. MyEclipse10 激活

热门文章

  1. bootstrap模态框弹出居中显示
  2. win7安装php失败,win7升win10安装失败怎么办
  3. IP对亚马逊测评自养号有多重要?
  4. 《关于TCP SYN包的超时与重传》——那些你应该知道的知识(四)
  5. 【NeurIPS100】谷歌、Facebook、斯坦福等十篇机器学习最新论文解读
  6. 创业者该怎么快准狠抓住知识付费项目这个机会变现?
  7. css源码笔记(四)【爱创课堂专业前端培训】
  8. 视频网站中video标签中blob:http
  9. 大学计算机基础python第二次作业_python第二次作业
  10. 基于STM32F03RCT的多路频率占空比可调PWM输出