更换日期只会更换预约数,不会更换医生信息,所以需要使用ajax局部刷新
解决高并发,取出医生信息从缓冲区里取,不要从数据库取
页面id需要显示的时候就把id拼接成字符串,传到页面,在ajax的时候把字符串卸载地址栏上
更换日期只需要通过页面获取id,通过id和日期查看redis里的医生list长度,在算出预约数
在使用ajax修改value
mapper
一个方法通过id查询医生信息
doctormmaper 新加一个方法
<select id="selectDoctorById" parameterType="Integer" resultMap="doctorMap">
select * from doctor where doctorId = #{
doctorId}
</select>
dao层
CacheDaoImpl 缓冲区实现类
新增一个方法
Cacheable,通过id吧每个医生信息存到redis里,string类型
重点!序列化:医生实体类必须实现Serializable接口
@Override
//Cacheable:执行此函数前先在缓存中取数据,若缓存中不存在则执行此函数,并吧信息缓存起来
@Cacheable(value = "doctor", key = "#p0") //键名为doctor::1
public Doctor getDoctorById(Integer doctorId) {
return doctorMapper.selectDoctorById(doctorId);
}
service层
新增一个方法
@Override
public Doctor getDoctorById(Integer doctorId) {
return cacheDao.getDoctorById(doctorId);
}
controller层
获取预约数方法 页面绑定onchange方法 //onchange参数改变触发
页面获取日期和医生的id字符串(之前all_doctor方法穿过)
获取参数时可以把字符串转成数组(我也不知道为什么,就是能!springboot牛逼!)
获取需要把数据传到地址栏上~
@RequestMapping("get_total")
@ResponseBody
public Map<String, Integer> getDoctorsTotal(Integer[] doctorId, @DateTimeFormat(pattern = "yyyy-MM-dd") Date bookingDate) {
Map<String, Integer> result = new HashMap<>();
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String date = fmt.format(bookingDate);
for (Integer id : doctorId) {
Doctor doctor &#