酒店预订系统–【批量创建房间 绑定楼层】 Mybatis的foreach批量添加
功能分析 :
酒店管理员完成对自己酒店的房型,房间 , 的添加。涉及到房间数很多,所以采用批量添加的方法,进行多个房间的批量添加。
整体结构
酒店 == > 楼栋 == > 楼层pId=? == > 房间 == > 设备
分析表结构:
分析前端页面传递的参数
接下来就是接收前端参数
创建对象 获取有用数据, 存到集合中进行批量添加
主体思路:
- 用相应的对象进行接收
- 获取房间号(字符串数组)遍历房间号,得到每一个对象添加到集合中
- 在for循环外面new 一个集合
- 把遍历创建的对象放入集合中
- 调用方法进行添加
(各路大神的想法)
附上我的代码
/**
* 商户端,批量添加房间
* 多个房间
*
* @param room
* @return
*/
// @RequestMapping(value = "patchSaveRoom")
@PostMapping("patchSaveRoom")
private Result patchSaveRoom(@RequestBody HotelRoomVo hotelRoomVo) {
Result result = ResultFactory.getSuccessResult("批量保存成功");
try {
List<HotelRoom> roomList = Lists.newArrayList();
String[] roomCodes = hotelRoomVo.getCode().split(",");
for (String codes : roomCodes) {
HotelRoom room = new HotelRoom();
System.out.println(codes);
room.setCode(codes);
room.setId(String.valueOf(UUID.randomUUID()));
room.setName(codes);
room.setGroupId(hotelRoomVo.getGroupId());
room.setHouseId(hotelRoomVo.getHouseId());
room.setHotelId(hotelRoomVo.getHotelId());
String floorId = room.getGroupId();
HHotelGroup buildFloor = hHotelGroupService.selectByPrimaryKey(Long.valueOf(floorId));
// 获取当前的楼层数 buildFloor (楼栋== 楼层)
List<HHotelGroup> floor = buildFloor.getChildrenList();
for (HHotelGroup floors : floor) {
String floornum = floors.getFloornum();
room.setFloorCount(Integer.valueOf(floornum));
}
roomList.add(room);
}
// 用对象进行接收
// 获取到对象里面的code 这是一个字符串数组
// 遍历字符串数组
hotelRoomService.patchSaveRoom(roomList);
} catch (Exception e) {
e.printStackTrace();
result = ResultFactory.getErrorResult("批量保存失败");
}
return result;
}
对应XX.xml
<!-- // 批量添加房间
void patchSaveRoom(List<HotelRoom> hotelRooms); -->
<insert id="patchSaveRoom" parameterType="java.util.List">
insert into h_hotel_room (
id,
hotel_id,
house_id,
group_id,
name,
code,
state,
floor_count)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id,jdbcType=VARCHAR},
#{item.hotelId,jdbcType=VARCHAR},
#{item.houseId,jdbcType=VARCHAR},
#{item.groupId,jdbcType=VARCHAR},
#{item.code,jdbcType=VARCHAR},
#{item.name,jdbcType=VARCHAR},
#{item.state,jdbcType=VARCHAR},
#{item.floorCount,jdbcType=VARCHAR}
)
</foreach>