怎样使用MyBatis轻松实现递归查询与存储过程调用

技术怎样使用MyBatis轻松实现递归查询与存储过程调用怎样使用MyBatis轻松实现递归查询与存储过程调用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。递

如何用MyBatis轻松实现递归查询和存储过程调用,相信很多没有经验的人都不知所措。因此,本文总结了问题产生的原因及解决方法。希望你能通过这篇文章解决这个问题。

00-1010因为部门的层级是不可控的,如果我想得到所有部门的完整json,就必须使用递归调用。用Java代码处理递归有点低。正如MyBatis的ResultMap中的集合可以轻松解决这个问题一样,核心代码如下:

resultMapid=' base resultmap ' type=' org . sang . bean . department '

idproperty='id'column='id'/

result column=' name ' property=' name '/

result column=' ParentId ' property=' ParentId '/

result column=' isParent ' property=' isParent '/

collection property=' children ' of type=' org . sang . bean . department ' select=' org . sang . mapper . department mapper . getdepbypid ' column=' id '

/收藏

/resultMap

selectid=' getDepByPid ' resultmap=' base resultmap '

选择1。* from department 1 where D1 . ` ParentID `=# { PID } and 1 . enabled=true;

/select每个Department都有一个子属性,getDepByPid方法的返回结果是一个BaseResultMap,而BaseResultMap中的集合会调用getDepByPid方法,所以我们可以快速实现一个递归调用。映射器只需要定义以下方法:

list departmentgetdepbypid(long PID);查询结果如下(部分):

[

{

id':1,

名称' : '股东会',

parentId':-1,

启用' :路径,

儿童:[

{

id':4,

姓名' : '董事长,

         "parentId": 1,
                "enabled": true,
                "children": [
                    {
                        "id": 5,
                        "name": "总经理",
                        "parentId": 4,
                        "enabled": true,
                        "children": [
                            {
                                "id": 8,
                                "name": "财务部",
                                "parentId": 5,
                                "enabled": true,
                                "children": [],
                                "parent": false
                            }],
                        "parent": true
                    }
                ],
                "parent": true
            }
        ],
        "parent": true
    }
]

存储过程调用

存储过程调用比较简单,以添加部门为例,如下:

1.Mapper中添加如下方法:

void addDep(@Param("dep") Department department);

2.xml中写法如下:

<select id="addDep" statementType="CALLABLE">
    call addDep(#{dep.name,mode=IN,jdbcType=VARCHAR},#{dep.parentId,mode=IN,jdbcType=INTEGER},#{dep.enabled,mode=IN,jdbcType=BOOLEAN},#{dep.result,mode=OUT,jdbcType=INTEGER},#{dep.id,mode=OUT,jdbcType=BIGINT})
</select>

注意statementType调用表示这是一个存储过程,mode=IN表示这是输入参数,mode=OUT表示这是输出参数,调用成功之后,在service中获取department的id和result字段,就能拿到相应的调用结果了。

看完上述内容,你们掌握怎样使用MyBatis轻松实现递归查询与存储过程调用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/79838.html

(0)

相关推荐

  • 嵌入式Linux Framebuffer怎么描点画线

    技术嵌入式Linux Framebuffer怎么描点画线这篇文章主要讲解了“嵌入式Linux Framebuffer怎么描点画线”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学

    攻略 2021年11月23日
  • python第三方模块

    技术python第三方模块 python第三方模块第三方模块
    第三方模块:并不是python自带的 需要基于网络下载下来'''pip所在的路径添加环境变量'''
    下载第三方模块的方式方式1:命令行借助

    礼包 2021年11月30日
  • 香港云与VPS的区别云服务器香港

    技术香港云与VPS的区别云服务器香港任何稳运行的网站都需要的云服务器与VPS服务器平台的基石。如果不了解这些云服务器和VPS,选择合适的网络托管类型可能既乏味又耗时。下面就来简单介绍一下二者的区别什么是香港云服务器? 云

    礼包 2021年12月17日
  • Spring Boot打包不同环境配置与Shell脚本部署的方法教程

    技术Spring Boot打包不同环境配置与Shell脚本部署的方法教程这篇文章主要介绍“Spring Boot打包不同环境配置与Shell脚本部署的方法教程”,在日常操作中,相信很多人在Spring Boot打包不同环

    攻略 2021年10月26日
  • 视觉传播设计与制作,视觉传播设计与制作就业方向

    技术视觉传播设计与制作,视觉传播设计与制作就业方向1首先,你可以选择去设计公司,可以去企业的设计部门工作视觉传播设计与制作。你可以去设计一些企业内部宣传手册,标志和宣传海报等等。2去广告公司也是个不错的选择,你可以在广告

    生活 2021年10月19日
  • 树莓派上如何安装SVN服务器

    技术树莓派上如何安装SVN服务器这篇文章主要介绍了树莓派上如何安装SVN服务器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。sudo apt-get in

    攻略 2021年11月20日