当前位置: 首页 > 编程笔记 >

mybatis collection 多条件查询的实现方法

东郭展
2023-03-14
本文向大家介绍mybatis collection 多条件查询的实现方法,包括了mybatis collection 多条件查询的实现方法的使用技巧和注意事项,需要的朋友参考一下

mybatis collection 多条件查询的实现方法

前言:

业务需要通过mybatis 查询返回嵌套集合,嫌多次查询太麻烦,用自带的高级查询解决问题,下边是代码,已测试通过。

说下自己的理解,就是一个主查询结果集里面嵌套了子查询的结果集,可以是多个子查询,每个子查询的条件从主查询结果集中获取,返回值各自定义。collection 标签的property是主查询里面集合的名字,如果有多个就再写个collection,column是子查询参数,单参数直接写主查询结合返回结果,例如直接写上user_id,要是数据库的字段,多条件就封装下,例如{userId=user_id,theme=theme},然后子查询的parameterType写"java.util.Map",多条件查询好像只有mybatis3.0以后才有,看网上资料说的,没验证过,ofType是集合里的对象,select是对应下面的语句

实现代码:

<resultMap id="BaseResultMap" type="web.model.UserMessage" > 
 <id column="id" property="id" jdbcType="INTEGER" /> 
 <result column="user_id" property="userId" jdbcType="INTEGER" /> 
 <result column="theme" property="theme" jdbcType="VARCHAR" /> 
 <result column="status" property="status" jdbcType="INTEGER" /> 
 <result column="theme_time" property="themeTime" jdbcType="TIMESTAMP" /> 
 <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> 
 <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" /> 
 <result column="yn" property="yn" jdbcType="INTEGER" /> 
 </resultMap> 
 
<resultMap id="BaseVoResultMap" type="web.model.vo.UserMessageVo" extends="BaseResultMap"> 
 <collection property="userMessageDetailList" column="{userId=user_id,theme=theme}" javaType="java.util.ArrayList" ofType="web.model.UserMessageDetail" select="selectUserMessageDetailById"/> 
 </resultMap> 
 
<resultMap id="BaseDetailResultMap" type="web.model.UserMessageDetail" > 
 <id column="id" property="id" jdbcType="INTEGER" /> 
 <result column="user_message_id" property="userMessageId" jdbcType="INTEGER" /> 
 <result column="sponsor_id" property="sponsorId" jdbcType="INTEGER" /> 
 <result column="user_id" property="userId" jdbcType="INTEGER" /> 
 <result column="user_type" property="userType" jdbcType="INTEGER" /> 
 <result column="provider_id" property="providerId" jdbcType="INTEGER" /> 
 <result column="message" property="message" jdbcType="VARCHAR" /> 
 <result column="status" property="status" jdbcType="INTEGER" /> 
 <result column="message_time" property="messageTime" jdbcType="TIMESTAMP" /> 
 <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> 
 <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" /> 
 <result column="yn" property="yn" jdbcType="INTEGER" /> 
 </resultMap> 
 
 <select id="selectUserMessageById" resultMap="BaseVoResultMap" parameterType="java.lang.Integer"> 
 select * from user_message where user_id = #{userId,jdbcType=INTEGER} 
 </select> 
 
 <select id="selectUserMessageDetailById" resultMap="BaseDetailResultMap" parameterType="java.util.Map"> 
 select * from user_message_detail where user_id = #{userId,jdbcType=INTEGER} and message = #{theme,jdbcType=VARCHAR} 
 </select> 

selectUserMessageById,这个是主查询,VO只多了个 private List<UserMessageDetail> userMessageDetailList,

这个属性,下面是返回值结构截图

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 本文向大家介绍Thinkphp使用mongodb数据库实现多条件查询方法,包括了Thinkphp使用mongodb数据库实现多条件查询方法的使用技巧和注意事项,需要的朋友参考一下 有个项目用了mongodb数据库,查询条件有and也有or,按Thinkphp官方手册,使用复合查询(_complex),getLastSql输出查询语句,发现查询条件是空的.用字符串模式查询(_string),请求字符

  • 有多个文档,每个文档包含大约100个字段。我想执行以下搜索槽elasticsearch Java API5.x: 有3个字段我想用于这个搜索,即。

  • 查询条件方法 查询和统计主要使用Get, Find, Count, Rows, Iterate这几个方法,同时大部分函数在调用Update, Delete时也是可用的。在进行查询时可以使用多个方法来形成查询条件,条件函数如下: Alias(string) 给Table设定一个别名 engine.Alias("o").Where("o.name = ?", name).Get(&order) An

  • 本文向大家介绍php查询及多条件查询,包括了php查询及多条件查询的使用技巧和注意事项,需要的朋友参考一下 单条件查询: 1.先要有一张表,显示出表中的数据: 上图: 啥都没改的一张表 2.再来个from表单,让用户输入,点击查询: 如图: 3.建立关键字查询: 图: 多条件查询: 前面照旧; 出了php的语句: 效果图: 这样:有几个条件就做几个条件变量,第一个条件不为空就执行的第一个条件,第二

  • 本文向大家介绍Layui实现带查询条件的分页,包括了Layui实现带查询条件的分页的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Layui实现带查询条件的分页,供大家参考,具体内容如下 这个前端UI框架是真的让人又爱又恨呐!想了很久的方案才行的通 这是全部源码: 这个业务只有一个问题那就是button,我们需要把button的标签换了,换成a标签 还有一个点就是在点击查询后,获取的

  • 问题内容: 在我当前的项目中,我遇到了使用hibernate条件查询获取实体的问题。我有以下实体: 教授,其中包含学生名单 学生,其中包含作业列表。 作业,其中包含分配到的学生的ID。 现在,我想获得与教授有关的所有作业,即教授分配给他的学生的所有作业。 此查询显示我要在条件查询中实现的内容。 如何使用hibernate条件API实施此查询? 问题答案: 假设您的表格是这样的: 使用别名的简单示例