mybatis collection 多条件查询

vo 类:

@Data
public class QuestAnswerTitleVo implements Serializable {
    private static final long serialVersionUID = 1L;

    private String questTitleId;
    private String examTitleId;
    private String examTitle;
    private String type;

    private List<QuestAnswerItemVo> itemList;

}

@Data
public class QuestAnswerItemVo implements Serializable {
    private static final long serialVersionUID = 1L;

    private String itemId;
    private String itemTitle;

    /**
     * 出现次数
     */
    private Integer nums;

}

xml:

 <resultMap id="itemMap" type="org.jeecg.modules.stu.quest.vo.QuestAnswerItemVo"></resultMap>
    <resultMap id="titleMap" type="org.jeecg.modules.stu.quest.vo.QuestAnswerTitleVo">
        <result property="questTitleId" column="title_id"></result>
        <result property="examTitleId" column="exam_title_id"></result>
        <result property="examTitle" column="exam_title"></result>
        <result property="type" column="type"></result>
        <collection property="itemList" column="{questTitleId=title_id,examTitleId=exam_title_id}" select="selItemList"></collection>
    </resultMap>
    <select id="selItemList" resultMap="itemMap">
        select a.id item_id,case when b.nums is null then 0 else b.nums end nums,a.content item_title from xg_tk_items a
        left join
        (select item_id,count(0) nums from xg_quest_answer
        where title_id =#{questTitleId} and exam_title_id = #{examTitleId}
        group by title_id,item_id) b
        on a.id=b.item_id
        where a.title_id = #{examTitleId}
    </select>

    <select id="getExamTitleList" resultMap="titleMap">
        select a.title_id, a.exam_title_id,b.title exam_title,b.type  from xg_quest_exam_title a
        left join xg_tk_title b
        on a.exam_title_id = b.id
        where a.title_id = #{titleId}
        order by order_num
    </select>

mapper:

 List<QuestAnswerTitleVo> getExamTitleList(String titleId);
<collection property="itemList" column="{questTitleId=title_id,examTitleId=exam_title_id}" select="selItemList"></collection>

这个里面 questTitleId 和 examTitleId 相当于定义了两个变量,用 “titleMap” 查出的列为其赋值,向“selItemList” 中传参,vo类中不需要明确定义这两个属性。

MyBatis 中可以通过 `collection` 元素来进行关联表的条件查询。 `collection` 元素用于处理一对多的关联关系,它可以用来映射一个 List 或 Array 对象。下面是一个示例的 mapper.xml 文件: ```xml <select id="findUserWithOrders" parameterType="Integer" resultMap="userResultMap"> SELECT u.*, o.id AS order_id, o.order_no AS order_no, o.status AS order_status FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.id = #{id} ORDER BY o.id </select> <resultMap id="userResultMap" type="User"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="password" column="password"/> <collection property="orders" ofType="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <result property="status" column="order_status"/> <!-- other result mappings for Order --> </collection> </resultMap> ``` 这个例子中,我们定义了一个名为 `findUserWithOrders` 的查询语句,它接受一个参数类型为 `Integer` 的对象。查询语句中使用了 LEFT JOIN 连接了 `users` 和 `orders` 表,并在 WHERE 子句中使用了传入的参数 `id` 来限制查询结果只返回指定用户的信息。在结果映射中,我们使用了 `collection` 元素来将一个 `User` 对象中的 `orders` 属性映射为一个 `List<Order>` 对象。 在实际使用中,你需要根据自己的数据表结构和业务逻辑来编写对应的 mapper.xml 文件。你可以参考这个示例,根据自己的情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值