怎样使用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)

相关推荐

  • 一氧化碳化学式,一氧化碳的化学符号是什么

    技术一氧化碳化学式,一氧化碳的化学符号是什么一氧化碳是由碳和氧组成,元素符号为C何O,其化学式为CO。 在标准状态下一氧化碳是无色一氧化碳化学式、无味,有毒的气体,其相对分子质量为28,密度为1.25g/L,冰点为-20

    生活 2021年10月22日
  • 嵌入式Linux Framebuffer怎么描点画线

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

    攻略 2021年11月23日
  • apr是几月,APR办理护照的时候指的什么

    技术apr是几月,APR办理护照的时候指的什么护照有效期上的APR指的是4月份的意思,10 apr 63应该是“10 apr 13”即到期时间是2013年4月10日apr是几月。1、外交护照和公务护照有效期最长不超过5年

    生活 2021年10月26日
  • Visual Studio 2010 RC两个错误问题的解决方法

    技术Visual Studio 2010 RC两个错误问题的解决方法Visual Studio 2010 RC两个错误问题的解决方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小

    攻略 2021年10月28日
  • 家具品牌排行榜,全国十大名牌家具的排名

    技术家具品牌排行榜,全国十大名牌家具的排名网上复制的家具品牌排行榜,希望对你有用啊,呵呵。 中国十大木地板品牌排行榜: 01,圣象地板(中国驰名商标,中国名牌)圣象集团; 02,盈彬大自然(中国名牌,国家免检产品)佛山

    生活 2021年10月28日
  • JavaScript中的DOM有什么作用

    技术JavaScript中的DOM有什么作用本篇内容介绍了“JavaScript中的DOM有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大

    攻略 2021年11月20日