MyBatis 调用存储过程

使用存储过程 in 和 out 参数

<select id="findAddress" statementType="CALLABLE">
    {call find_address(
        #{1,mode=IN,jdbcType=VARCHAR},
        #{2,mode=IN,jdbcType=VARCHAR},
        #{3,mode=OUT,jdbcType=VARCHAR},
    )}
</select>

定义Mapper接口方法

void findAddress(String firstName,String lastName,String address );

调用 findAddress 方法后 address 参数保存OUT参数的输出值

存储过程游标

参数类:

public class SystemRole {
    private int roleId;

    private String roleName,roleMemo;

    // getter、setter 略
}
public class UserParameter {

    private String firstName,lastName,address;
    
    private List<SystemRole> roleList;
    
    // getter、setter 略
}

映射配置:

<resultMap id="roleMap" type="SystemRole">
    <id property="roleId" column="role_id" />
    <id property="roleName" column="role_name" />
    <id property="roleMemo" column="role_memo" />
</resultMap>

<select id="findAddress" parameterType="UserParameter"  statementType="CALLABLE">
    {call find_address(
        #{firstName,mode=IN,jdbcType=VARCHAR},
        #{lastName,mode=IN,jdbcType=VARCHAR},
        #{address,mode=OUT,jdbcType=VARCHAR},
        #{roleList,mode=OUT,jdbcType=CURSOR,javaType=ResultSet,resultMap=roleMap},
    )}
</select>

Mapper接口方法

void findAddress(UserParameter parameter);

测试代码:

UserParameter parameter = new UserParameter();
parameter.setFirstName("a");
parameter.setLastName("b");
this.systemUserMapper.findAddress(parameter);
System.out.println(parameter.getAddress());
for (SystemRole systemRole : parameter.getRoleList()) {
    System.out.println(systemRole);
}

 

posted @ 2020-11-13 22:38  半雨微凉  阅读(163)  评论(0)    收藏  举报