从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>
我正在使用与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>