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

相关推荐

  • 张飞穿针的歇后语是什么,大眼瞪小眼”比喻什么意思

    技术张飞穿针的歇后语是什么,大眼瞪小眼”比喻什么意思有一次,张飞正要率军出发,却被 夫人叫住,拿出一根绣花针,一根红纱 线,非要张飞帮她把线穿上才能走。张飞听了哈哈大笑:“穿针引线,虽是 女人干的活,但也难不住我张飞穿针

    生活 2021年10月27日
  • pupils是什么意思,pupils是什么意思

    技术pupils是什么意思,pupils是什么意思pupils释义:n. 小学生;弟子;瞳孔 是名词pupil的复数形式pupils是什么意思。 1. pupil指由老师亲自照顾和指导的对象,尤指中小学生。在美式英语里,

    生活 2021年10月24日
  • javascript内存泄漏有哪些原因

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

    攻略 2021年11月20日
  • 免费刷粉网站推广,抖音怎么增加粉丝量?

    技术免费刷粉网站推广,抖音怎么增加粉丝量?免费刷粉网站推广,抖音怎么增加粉丝量?抖音视频一直都是很受大家欢迎的一个社交软件,不仅仅是刷抖音看作品,也有很多人在抖音上拍摄作品分享。分享抖音作品就得有点赞双击量,这样才能有人

    测评 2021年11月11日
  • JavaScript实现的人脸检测方法是怎样的

    技术JavaScript实现的人脸检测方法是怎样的这篇文章给大家介绍JavaScript实现的人脸检测方法是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我一直对视频和图片中的人脸标记、检测和

    攻略 2021年11月17日
  • css又称什么

    技术css又称什么这篇文章主要介绍“css又称什么”,在日常操作中,相信很多人在css又称什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css又称什么”的疑惑有所帮助!接下来,请跟着小

    攻略 2021年11月17日