从request body中获取params,但不能在mybatis annotation join query中使用

Get params from request body, but cannot be used in mybatis annotation join query

我正在使用与maven 和Mybatis 集成的Springboot。我想使用以下代码进行连接查询。我总共需要 3 个查询**才能获得结果。想问 通过查询传递参数的正确方法是什么

第一个是我的主要table,我可以得到所有的酒店名称,那些两个参数是从用户传递的,但他们会不在此查询中使用.

第一个查询中的 classes 列是我进行多对多查询的地方

@Select("Select * from hotels ")
@Results(value = {
            @Result(column = "id", property = "id", id = true),
            @Result(column = "chiName", property = "chiName"),
            @Result(column = "engName", property = "engName"),
            @Result(column = "{id, startDate, endDate}", property = "classes", many = @Many(select = "getAllClass")),
            @Result(column = "telephone", property = "telephone")
    })
List<Map<String, Hotel>> getAllHotels(@Param("startDate") String startDate, @Param("endDate") String endDate);

我的第二个查询如下,我尝试做的是从第一个查询传递参数但它没有成功。

@Select("Select * from classes " +
            "left join hotels on hotels.id = classes.hotelId " +
            "WHERE classes.hotelId = #{hotels.id} "
    )
    @Results({
            @Result(column = "id", property = "id", id = true),
            @Result(column = "hotelId", property = "hotelId"),
            @Result(column = "className", property = "className"),
            @Result(column = "isActivate", property = "isActivate"),
            @Result(column = "totalRoom", property = "totalRoom"),
            @Result(column = "availableRoom", property = "availableRoom"),
            @Result(column = "{id, startDate, endDate}", property = "bookingRecords", many = @Many(select = "getBookingRecords"))
    })
    List<Class> getAllClass();

我的第三个查询:


    @Select("Select * from booking_records " +
            "left join classes on classes.id = booking_records.classId  " +
            "WHERE booking_records.classId = #{classes.id} " +
            "AND " +
            "`date` BETWEEN #{startDate} AND #{endDate}"
    )
    @Results({
            @Result(column = "id", property = "id", id = true),
            @Result(column = "userId", property = "userId"),
            @Result(column = "classId", property = "classId"),
            @Result(column = "date", property = "date"),
            @Result(column = "isActivate", property = "isActivate"),
    })
    List<BookingRecord> getBookingRecords();

最后我用mybatis xml文件写了这个。以下是我所拥有的。有需要请参考

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.hotelmanagementsys.hotelmang.dao.SearchMapper">
    <resultMap id="BaseResultMap" type="Hotel">
        <id property="id" column="id"/>
        <result property="chiName" column="chiName"/>
        <result property="engName" column="engName"/>
        <result property="telephone" column="telephone"/>

        <collection property="classes" column="id" ofType="Class" javaType="List">
            <result property="id" column="id"/>
            <result property="hotelId" column="hotelId"/>
            <result property="className" column="className"/>
            <result property="isActivate" column="isActivate"/>
            <result property="totalRoom" column="totalRoom"/>
            <result property="availableRoom" column="availableRoom"/>

            <collection property="bookingRecords" column="id" ofType="BookingRecord" javaType="List">
                <result property="id" column="id"/>
                <result property="userId" column="userId"/>
                <result property="classId" column="classId"/>
                <result property="date" column="date"/>
                <result property="isActivate" column="isActivate"/>
            </collection>
        </collection>
    </resultMap>


    <select id="filterHotel" resultMap="BaseResultMap">
        SELECT hotels.*, classes.*, booking_records.* FROM hotels
        LEFT JOIN classes ON (classes.hotelId = hotels.id)
        LEFT JOIN booking_records ON (classes.id = booking_records.classId)
        WHERE booking_records.date BETWEEN #{startDate} AND #{endDate}
    </select>

</mapper>