Golang 调用MySQL存储过程

版权声明:本文为博主原创文章,转载请声明出处!有问题联系QQ或微信(同号)85411418。 https://blog.csdn.net/ming2316780/article/details/86499344

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

Golang 调用MySQL存储过程

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

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

存储过程代码 demo:

  • 数据库名:user
  • 表名:student
create table student
(
  id      int auto_increment primary key,
  name    varchar(10) null,
  age     int         null comment '年龄',
  gender  tinyint     null comment '性别<1:男/2:女>',
  phone   varchar(15) null,
  address varchar(50) null
);

insert  into student (name, age, gender, phone, address) values ('Jerry',28,1,'13812341234','上海市');
  • 存储过程 demo
-- 创建存储过程
create procedure query_student(IN i_name varchar(10),
                            IN i_gender tinyint,
                            OUT o_id int,
                            OUT o_name varchar(10),
                            OUT o_age int,
                            OUT o_gender tinyint,
                            OUT o_phone varchar(15),
                            out o_address varchar(50))
  comment '根据名字和性别查询学生信息'
begin

-- 搜索信息并赋值
  select student.id,
         student.name,
         student.age,
         student.gender,
         student.phone,
         student.address
         into o_id,o_name,o_age,o_gender,o_phone,o_address
  from student
  where student.name = i_name
    and student.gender = i_gender;
    
-- 返回结果需要返回的结果
  select o_id,o_name,o_age,o_gender,o_phone,o_address;

end;

Golang代码 demo:

  • 代码:
var engine *xorm.Engine

func InitMySQL(dbDsn string) {
	var err error
	engine, err = xorm.NewEngine("mysql", dbDsn)
	if err != nil {
		panic(err)
	}
	engine.ShowSQL(true)
}

func MySQL() *xorm.Engine {
	return engine
}

InitMySQL("user:password@tcp(127.0.0.1:3306)/user?charset=utf8")

queryString, err := MySQL().QueryString("call user.query_student(?,?,@1,@2,@3,@4,@5,@6)", "Jerry", 1)
if err != nil {
	log.Println("err:", err)
}

for k, v := range queryString[0] {
	fmt.Printf("columns:%v - value:%v\n", k, v)
}
  • 输出结果
columns:o_name - value:Jerry
columns:o_age - value:28
columns:o_gender - value:1
columns:o_phone - value:13812341234
columns:o_address - value:上海市
columns:o_id - value:1

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

猜你喜欢

转载自blog.csdn.net/ming2316780/article/details/86499344