首页 > 作文

MyBatis如何调用存储过程与存储函数

更新时间:2023-04-03 23:21:08 阅读: 评论:0

目录
1、mybatis调用存储过程2、mybatis调用存储函数

1、mybatis调用存储过程

mybatis支持使用存储过程的配置。当使用存储过程时,需要设置一个参数“mode”,其值有in(输入参数)、out(输出参数)和inout(输入/输出参数)。

mybatis定义存储过程如下:

<!-- 存储过程 --><lect id="lectsomething" statementtype="callable" parametertype="hashmap" resulttype="com.pjb.mybatis.po.ur">    {call proc_for_input(#{in英语语法口诀formation,mode=in,jdbctype=varchar})}</lect>

【示例】创建存储过程,实现分页查询用户列表,并返回数据总数和总页数,通过mybatis调用该存储过程。

(1)在mysql数据库中创建用户信息表(tb_ur)。

-- 创建“用户信息”数据表create table if not exists tb_ur( id int auto_increment primary key comment '用户编号',ur_name varchar(50) not null comment '用户姓名',x char(2) default '男' comment '性别') comment = '用户信息表';

(2)创建存储过程,实现分页查询用户列表,并返回数据总数和总页数。

-- 将结束标志符更改为$$delimiter $$ /*  -- 存储过程:分页查询用户列表,并返回数据总数和总页数  -- 输入参数:page_index:当前页码  -- 输入参数:page_size:分页大小  -- 输出参数:total_count:数据总数  -- 输出参数:total_page:总页数*/create procedure proc_arch_ur(in page_index int,in page_size int, out total_count int, out total_page int)begindeclare begin_no int;t begin_no = (page_index-1)*page_size; -- 分页查询列表lect * from tb_urwhere id >= (lect id from tb_urorder by id asclimit begin_no,1)order by id asclimit page_size; -- 计算数据总数lect count(1) into total_count from tb_ur; -- 计算总页数t total_page = floor((total_count + page_size - 1) / page_size);end$$ -- 将结束标志符更改回分号delimiter ;

(3)创建用户信息持久化类(ur.java)。

package com.pjb.mybatis.po; /** * 用户信息的持久化类 * @author pan_junbiao **/public class ur{    private int id; //用户编号    private string urname; //用户姓名    private string x; //性别     //省略getter与tter方法...}

(4)编写sql映射配置。

<!-- 存储过程:分页查询用户列表,并返回数据总数和总页数 --><lect id="proc_arch_ur" statementtype="callable" parametertype="hashmap" resulttype="com.pjb.mybatis.po.ur">    {call proc_arch_ur(#{page_index,mode=in,jdbctype=integer},      #人物写真摄影{page_size,mode=in,jdbctype=integer},      #{total_count,mode=out,jdbctype=integer},      #{total_page,mode=out,jdbctype=integer})}</lect>

(5)编写执行方法。

/** * 使用mybatis调用存储过程:分页查询用户列表,并返为什么长斑回数据总数和总页数 * @author pan_junbiao */@testpublic void procarchur(){    dataconnection dataconnection = new dataconnection();    sqlssion sqlssion = dataconnection.getsqlssion();    //封装查询参数    map params = new hashmap();    params.put("page_index",2);  //输入参数:当前页码    params.put("page_size",10);  //输入参数:分页大小    params.put("total_count",0); //输出参数:数据总数    params.put("total_page",0);  //输出参数:总页数    //调用存储过程    list<ur> urlist = sqlssion.lectlist("test.proc_arch_ur",params);    system.out.println("查询第"+ params.get("page_index") +"页的数据,每页共"+params.get("page_size")+"条数据");    //遍历用户列表    for (ur ur : urlist)    {        system.out.println("编号:" + ur.getid() +" 姓名:" + ur.geturname() + " 性别:" + ur.getx());    }    //获取输出参数    system.out.println("数据总数:" + params.get("total_count"));    system.out.println("总页数:" + params.get("total_page"));    sqlssion.clo();}

执行结果:

【示例】创建存储过程,实现新增用户信息,并返回自增主键,通过mybatis调用该存储过程。

(1)创建存储过程。

-- 将结束标志符更改为$$delimiter $$ /*  -- 存储过程:新增用户信息,返回自增主键  -- 输入参数:ur_name:用户姓名  -- 输入参数:x:性别  -- 输出参数:ur_id:自增主键*/create procedure proc_add_ur(in ur_name varchar(50),in x char(2), out ur_id int)begin-- 新增用户inrt into tb_ur(ur_name,x) value (ur_name,x);-- 获取自增主键lect last_inrt_id() into ur_id;end$$ -- 将结束标志符更改回分号delimiter ;

(2)编写sql映射配置。

<!-- 存储过程:新增用户信息,返回自增主键 --><inrt id="proc_add_ur" statementtype="callable" parametertype="com.pjb.mybatis.po.ur">  {call proc_add_ur(#{urname,mode=in,jdbctype=varchar},    #{x,mode=in,jdbctype=char},    #{id,mode=out,jdbctype=integer})}</inrt>

(3)编写执行方法。

/** * 使用mybatis调用存储过程:新增用户信息,返回自增主键 * @author pan_junbiao */@testpublic void procaddur(){    dataconnection dataconnection = new dataconnection();    sqlssion sqlssion = dataconnection.getsqlssion();    //新增的用户对象    ur ur = new ur();    ur.turname("pan_junbiao的博客");    ur.tx("男");    //调用存储过程执行新增    int reuslt = sqlssion.inrt("test.proc_add_ur",ur);    sqlssion.commit();    //打印结果    system.out.println("执行结果:"+reuslt);    system.out.println("自增主键:"+ur.getid());    sqlssion.clo();}

执行结果:

其实,新增数据后,获取自增主键是可以使用mybatis提供的<lectkey>标签,sql映射配置如下:

<!-- 存储过程:新增用户信息,返回自增主键 --><inrt id="proc_add_ur" statementtype="callable" parametertype="com.pjb.mybatis.po.ur">  <lectkey keyproperty="id" order="after" resulttype="java.lang.integer">      lect last_inrt_id()  </lectkey>  {call proc_add_ur(#{urname,mode=in,jdbctype=varchar},    #{x,mode=in,jdbctype=char})}</inrt>

但上述示例是为了能让该存储过程拥有一个返回的参数。

2、mybatis调用存储函数

【示例】创建存储函数,根据用户编号,获取用户名称,通过mybatis调用该存储函数。

(1)创建存储函数,根据用户编号,获取用户名称。

-- 将结束标志符更改为$$delimiter $$ /*  -- 存储函数:根据用户编号,获取用户名称  -- 输入参数:in_id:用户编号  -- 返回结果:用户名称*/create function func_get_ur_name(in_id int)re金堂公众信息网turns varchar(50)begin-- 定义返回变量declare out_name varchar(50); -- 查询用户信息,获取用户名称lect ur_name into out_name from tb_ur where id = in_id; -- 返回结果return out_name;end$$ -- 将结束标志符更改回分号delimiter ;

(2)编写sql映射配置。

<!-- 存储函数:根据用户编号,获取用户名称 --><lect id="func_get_ur_name" statementtype="callable" parametertype="hashmap" >    {#{urname,mode=out,jdbctype=varchar} = call func_get_ur_name(#{urid,mode=in,jdbctype=integer})}</lect>

(3)编写执行方法。

/** * 使用mybatis调用存储函数:根据用户编号,获取用户名称 * @author pan_junbiao */@testpublic void禁用usb funcgeturname(){    dataconnection dataconnection = new dataconnection();    sqlssion sqlssion = dataconnection.getsqlssion();    //封装参数    map urmap = new hashmap();    urmap.put("urname","");    urmap.put("urid",8);    sqlssion.lectone("test.func_get_ur_name",urmap);    system.out.println("用户名称:" + urmap.get("urname"));    sqlssion.clo();}

执行结果:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-03 23:21:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/7600a1e18f01054be91f4b80103a611b.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:MyBatis如何调用存储过程与存储函数.doc

本文 PDF 下载地址:MyBatis如何调用存储过程与存储函数.pdf

相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图