怎样使用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年12月2日
  • 对象与类

    技术对象与类 对象与类类:构造对象的模板或蓝图,类构造对象的过程称为创建类的实例
    封装(数据隐藏):将数据和行为组合在一个包里,并对对象使用者隐藏具体实现方式
    对象中的数据称为实例字段,操作数据的过程称

    礼包 2021年10月28日
  • 如何使用mysqlbinlog备份binlog搭建Binlog Server

    技术如何使用mysqlbinlog备份binlog搭建Binlog Server这篇文章给大家分享的是有关如何使用mysqlbinlog备份binlog搭建Binlog Server的内容。小编觉得挺实用的,因此分享给大

    攻略 2021年10月27日
  • python多线程如何秒爬猫眼电影

    技术python多线程如何秒爬猫眼电影这篇文章主要介绍python多线程如何秒爬猫眼电影,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!通过python3的多线程,获取猫眼电影top100电影清单,

    攻略 2021年11月24日
  • 怎么理解C#中Queue的线程安全问题

    技术怎么理解C#中Queue的线程安全问题怎么理解C#中Queue的线程安全问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。通过集合枚举在

    攻略 2021年11月11日
  • javascript如何使用数组中的sort方法

    技术javascript如何使用数组中的sort方法这篇文章主要为大家展示了“javascript如何使用数组中的sort方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“j

    攻略 2021年11月8日