课程名称:SpringBoot2.X + Vue + UniAPP,全栈开发医疗小程序
课程章节:第三章 使用Vue3.0+SpringBoot实现医护人员管理
课程讲师: 神思者
课程内容:
因为上传成功照片之后,要更新医生表的photo
字段值,所以要在DoctorDao.xml
文件中,声明SQL语句。Phoenix更新数据不能用UPDATE语句(不支持),必须使用UPSERT INTO语句。
<update id="updatePhoto" parameterType="Map">
UPSERT INTO HOSPITAL.DOCTOR("id", "photo")
VALUES(${id}, #{photo})
</update>
在com.example.hospital.api.db.dao
包DoctorDao
接口中,声明抽象方法。
public interface DoctorDao {
……
public void updatePhoto(Map param);
}
在com.example.hospital.api.service
包DoctorService
接口中,声明抽象方法。
public interface DoctorService {
……
public void updatePhoto(MultipartFile file, Integer doctorId);
}
在com.example.hospital.api.service.impl
包DoctorServiceImpl
类中,实现抽象方法。
@Service
@Slf4j
public class DoctorServiceImpl implements DoctorService {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.access-key}")
private String accessKey;
@Value("${minio.secret-key}")
private String secretKey;
……
@Override
@Transactional
public void updatePhoto(MultipartFile file, Integer doctorId) {
try {
String filename = "doctor-" + doctorId + ".jpg";
//在Minio中保存医生照片
MinioClient client = new MinioClient.Builder().endpoint(endpoint)
.credentials(accessKey, secretKey).build();
client.putObject(PutObjectArgs.builder().bucket("hospital")
.object("doctor/" + filename)
.stream(file.getInputStream(), -1, 5 * 1024 * 1024)
.contentType("image/jpeg").build());
//更新医生表photo字段
doctorDao.updatePhoto(new HashMap() {{
put("id", doctorId);
put("photo", "/doctor/" + filename);
}});
} catch (Exception e) {
log.error("保存医生照片失败", e);
throw new HospitalException("保存医生照片失败");
}
}
}
在com.example.hospital.api.controller
包DoctorController
类中,声明Web方法。
@RestController
@RequestMapping("/doctor")
public class DoctorController {
@PostMapping("/updatePhoto")
@SaCheckLogin
@SaCheckPermission(value = {"ROOT", "DOCTOR:UPDATE"}, mode = SaMode.OR)
public R updatePhoto(@Param("file") MultipartFile file, @Param("doctorId") Integer doctorId) {
doctorService.updatePhoto(file, doctorId);
return R.ok();
}
}
课程收获:通过视频加文档结合的方式,学习了Minio私有云保存照片文件,期待后续学习!