Mybatis many=@Many的传值问题解决

 更新时间:2025年11月28日 10:08:49   作者:alwaysonline1204  
本文详细介绍了在MyBatis通过主查询将单个或多个值传递给子查询的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 给子查询传递一个值

@Select({“select * from user where username = #{userName}”}) ①
@Results({
@Result(
property = “id”, column = “id” ②
),
@Result(
property = “roleList”,column=“id”, ③
many = @Many(select = “com.x.dt.mapper.UserMapper.selectByUserNameRoleId”)
)})
List selectByName(String userName);
@Select({"select id from role where id in(select role_id from user_role where user_id=#{userId})"})
List<Role> selectByUserNameRoleId(@Param("userId") String userId);

三个表
用户表: user
角色表:role
用户角色关联表:user_role

  1. ①主查询,查询得到结果;
  2. 将主查询结果里面的id字段赋给③;
  3. ③里面的id为子查询的条件,③的id与①主查询里面的数据库字段相对应;
  4. selectByUserNameRoleId通过③的coulmn为查询条件。

2. 给子查询传递多个值

@Mapper---------------主查询和子查询都要打上注解Mapper,才可以映射过去
@Select("<script>"
+ "SELECT user_id "
+ "CASE "
+ "WHEN (#{userName} = '' or #{userName} is null) "
+ "THEN NULL "
+ "ELSE #{userName} END AS user_name"---------------------核心语句,注意这边是=不是==
+ "FROM sys_user  "
+ "</script>")
@Results({
@Result(column = "{userName=user_name,userId=user_id}", property = "userList", javaType = List.class,
many = @Many(select = "com.dao.xxxDao.searchXxxByName"))--------------------------property是查询返回映射到DTO里面的变量,在column里面放置传到查多语句中的参数userName,userId
})
List<XxxDto> searchXxx(@Param("userName") String userName);---------传递过去的参数
@Mapper
@Select("<script>"
+ "SELECT * "
+ "FROM sys_detail "
+ "<if test=\"userId!=null \"> "
+ "AND user_id =#{userId} "
+ "</if> "
+ "<if test=\"userName!=null and userName!=\'\' \"> "
+ "AND user_name=#{userName} "
+ "</if> "
+ "</script>")
List<SysDetail> searchXxxByName(Map<String, String> param);------对应的参数一定要是Mapper

到此这篇关于Mybatis many=@Many的传值问题解决的文章就介绍到这了,更多相关Mybatis many=@Many传值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现微信公众平台朋友圈分享功能详细代码

    Java实现微信公众平台朋友圈分享功能详细代码

    这篇文章主要介绍了Java实现微信公众平台朋友圈分享功能详细代码,小编觉得挺不错的,这里分享给大家,供需要的朋友参考。
    2017-11-11
  • JAVA多线程之JDK中的各种锁详解(看这一篇就够了)

    JAVA多线程之JDK中的各种锁详解(看这一篇就够了)

    多线程编程可以说是在大部分平台和应用上都需要实现的一个基本需求,下面这篇文章主要给大家介绍了关于JAVA多线程之JDK中各种锁的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • Java实现动态模拟时钟

    Java实现动态模拟时钟

    这篇文章主要为大家详细介绍了Java实现动态模拟时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • SpringBoot整合阿里云开通短信服务详解

    SpringBoot整合阿里云开通短信服务详解

    这篇文章主要介绍了如何利用SpringBoot整合阿里云实现短信服务的开通,文中的示例代码讲解详细,对我们学习有一定帮助,需要的可以参考一下
    2022-03-03
  • SpringMVC中的http Caching的具体使用

    SpringMVC中的http Caching的具体使用

    本文主要介绍了SpringMVC中的http Caching的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • java设计模式之外观模式(Facade)

    java设计模式之外观模式(Facade)

    这篇文章主要为大家详细介绍了java设计模式之外观模式Facade的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • SpringCloud灰度发布的设计与实现详解

    SpringCloud灰度发布的设计与实现详解

    这篇文章主要介绍了SpringCloud灰度发布的设计与实现详解,灰度从字面意思理解就是存在于黑与白之间的一个平滑过渡的区域,所以说对于互联网产品来说,上线和未上线就是黑与白之分,而实现未上线功能平稳过渡的一种方式就叫做灰度发布,需要的朋友可以参考下
    2023-09-09
  • Clojure 与Java对比少数据结构多函数胜过多个单独类的优点

    Clojure 与Java对比少数据结构多函数胜过多个单独类的优点

    这篇文章主要介绍了Clojure 与Java对比少数据结构多函数胜过多个单独类的优点,在Clojure中,我们一次又一次地使用相同的数据结构,并在其上运行许多函,更多相关介绍需要的朋友可以参考一下下面文章内容
    2022-06-06
  • 手把手教你如何获取微信用户openid

    手把手教你如何获取微信用户openid

    众所周知小程序的openid相当重要,它是用户的唯一标识id,牵扯的支付,登录,授权等,下面这篇文章主要给大家介绍了关于如何获取微信用户openid的相关资料,需要的朋友可以参考下
    2023-02-02
  • SpringBoot对敏感数据进行脱敏的全过程

    SpringBoot对敏感数据进行脱敏的全过程

    在项目开发中,数据库经常会存储大量用户敏感信息,例如手机号、身份证号、邮箱、银行卡号、家庭地址、姓名等数据,如果后端直接把原始数据返回给前端,会造成严重的用户隐私泄露问题,所以本文给大家介绍了SpringBoot对敏感数据进行脱敏的全过程,需要的朋友可以参考下
    2026-04-04

最新评论