问题:设计时时间段预约是否会导致表字段过长?怎么优化查询,优化表的数据(sql不行, Java来凑)
这里提供一个解决方案:Map<String,int[][]>,即用一个二维数组储存教室的状态,每次访问是初始化数组,返回一个教室-状态集合,空闲为1,使用状态为0
但是,这又会遇到一个问题,怎么初始化数组
这样设计表,每次查询出来的结果集,并不是我们真正想要的教教室状态结果集,他是一个散列的集合,我们想要的是一个真正封装的List<ClassRoom>集合
这里提供一个解决方案:
先查询所有的教室名,获取一个教室的集合,然后遍历数组,查询每一个教室在特定时间的使用情况,然后对数组进行初始化,然后直接添加到map集合中
//数据库查询 @Autowired private ClassRoomMessageMapper classRoomMessageMapper; @Autowired private UserMapper userMapper; @Autowired private HistoryMapper historyMapper; //工具类 private Date date = new Date(); //简化数据库列表 private Map<String,Object> map = new HashMap<>(); //状态图 private int state[][] = {{1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1}};//获取非空的教室集 public void setMap(){ List<String> ClassRoomNameList = historyMapper.getAllClassRoomName(); for (String name:ClassRoomNameList) { List<ApplicationEventHistory> historiesList = historyMapper.getSpecifyTimePeriod(getYear(),getMonth(),getDay(),name); for (ApplicationEventHistory history:historiesList) { int day = getDay() - history.getDay(); int starTime = history.getStartTime(); int endTime = history.getEndTime(); for (int i = starTime; i <= endTime; i++) { state[day][i] = 0; } } map.put(name,state); } }