Golang 调用MySQL存储过程
原创:转载请标明出处:
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存储过程相关推荐
- go mysql存储过程_Golang 调用MySQL存储过程
Golang 调用MySQL存储过程 最近写项目发现,很多逻辑业务的实现,写到数据库的存储过程中,然后调用,真的非常方便.后端代码量大大减少,最重要的是性能高,速度快! 引用说明:项目使用数据库ORM ...
- hibernate mysql 存储过程_hibernate调用mysql存储过程
hibernate调用mysql存储过程 在最近的项目中,碰到一小段数据库数据分析的程序,需要结合多张表联合查询或涉及到子查询,项目主要采用的java ee开发,使用了hibernate框架,由于这些 ...
- vb获得mysql的值,VB.NET调用MySQL存储过程并获得返回值的方法
本文实例讲述了VB.NET调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体实现方法如下: Dim myConnectionString As String = "Data ...
- jsp实现mysql存储过程_JSP调用MySQL存储过程收藏
JSP调用MySQL存储过程收藏 1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列.不带参数的 call 转义序列的语法如下所示: {c ...
- mysql存储过程 php_PHP调用MYSQL存储过程实例
说一下 在PHP页面中调用MYSQL存储过程的方法 以下是几个例子 仅供参考 实例一:无参的存储过程 $conn = mysql_connect('localhost','root','root') ...
- c++调用mysql存储过程_C++中ADO调用MySQL存储过程失败,诡异的语法异常,求解中,附源码...
C++中ADO调用mysql存储过程失败,诡异的语法错误,求解中,附源码 不管怎么调整,死活都出现下面的错误 C++ADO代码我实在找不到什么错误了,难道是MySQL有什么问题,或者有其他需要注意的地 ...
- mysql inputoutput_PHP:同时使用INPUT和OUTPUT参数(不“ INOUT”)调用MySQL存储过程
从PHP,我想在MySQL中调用存储过程.该过程采用输入 和 输出参数- 而不是 " INOUT" 参数. 对于一个简单的示例,说我在MySQL中具有以下存储过程: DELIMIT ...
- jdbc mysql 存储过程查询数据_jdbc调用mysql存储过程实现代码
1. 创建存储过程 建立一个MySQL的存储过程 add_pro 复制代码 代码如下: delimiter // drop procedure add_pro // create procedure ...
- SpringBoot Mybatis注解调用Mysql存储过程并接收多个OUT结果集(多个mode=IN和mode=OUT参数)
其他同学提供的方式大部分都是Map接收调用mysql存储过程返回OUT结果集,要么游标,要么单个OUT,然后再次加工成想要的对象.涉及到直接用注解实现自动转换OUT参数结果集为对象时,都是忽略带过. ...
最新文章
- linux 查看锁机时间,3分钟短文|Linux 登陆痕迹查看,last 锁定所有可疑对象
- linux脚本读取mssql数据库,WebShell通过SQL语句管理MSSQL
- 大多数比特币 混币交易属合法交易
- elasticsearch,python包pyes进行的处理
- 理想内插_理想ONE性能测试:6.35秒就能破百,售价只要宝马X5一半
- 划分子网和构造超网的学习
- VTK:隐式函数之ImplicitQuadric
- Mysql数据库(七)——mysql高阶语句(上)
- TabError- inconsistent use of tabs and spaces in indentation 查验及解决方法
- 对于IDEA 导入eclipse项目后 没有办法启动部署 以及javax.servlet.http不存在
- 学习:如何把备份的bak还原到新的数据库(转)
- 【shell】echo不显示变量中的多个空格
- c mysql事务回滚_MYSQL事务回滚的2个问题分析
- 关于贴片机如何获取元件的位置思考
- Linux之Iptables防火墙管理与配置~
- 计算机协会游戏方案,计算机协会社团各月工作总结及工作计划
- 经济学的思维方式 [Basic Economics A Common Sense Guide to the Econom]
- Eclipse-WTP什么意思?
- 汤姆猫代码python_iOS开发:纯代码实现汤姆猫小游戏
- MyEclipse10 激活