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

相关推荐

  • 如何使用Java的MD5工具类和客户端测试类

    技术Java的MD5工具类和客户端测试类怎么使用这篇文章主要讲解了“Java的MD5工具类和客户端测试类怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的M

    攻略 2021年12月16日
  • 溜组词语,溜组词,四字词语怎么组词呢

    技术溜组词语,溜组词,四字词语怎么组词呢读音:【liū溜组词语、liù】 “溜”的组词有:溜冰、溜圆、溜光、溜走、溜号 “溜”的四字词语:溜之大吉、山溜穿石、走花溜冰、溜之乎也。溜”的组词 溜冰:拼音【liū bīng】

    2021年10月25日
  • 如何理解公共MySQL的数据库服务器层

    技术如何理解公共MySQL的数据库服务器层如何理解公共MySQL的数据库服务器层,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  MySQL插件式存储引擎是

    攻略 2021年11月9日
  • docker swarm集群中如何指定容器部署节点

    技术docker swarm集群中如何指定容器部署节点这篇文章给大家介绍docker swarm集群中如何指定容器部署节点,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在docker swarm 集

    攻略 2021年10月20日
  • debug R命令如何修改寄存器的值

    技术debug R命令如何修改寄存器的值这期内容当中小编将会给大家带来有关debug R命令如何修改寄存器的值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。    IDE : Masm

    攻略 2021年11月11日
  • 九个点用四条线连起来,怎么用四条线把九个点连在一起

    技术九个点用四条线连起来,怎么用四条线把九个点连在一起3个答案九个点用四条线连起来:1、 可以一笔画出三条直线来把这九个点连起来。第一条直线从上排左端那个点的上缘开始,向右下方延伸,穿过上排中间的点的中心和上排右端的点的

    生活 2021年10月27日