目录
1. 编辑相册--执行修改--Mapper层
2. 编辑相册--执行修改--Service层
3. 编辑相册--执行修改--Controller层
1. 编辑相册--执行修改--Mapper层
执行修改相册使用已有的update()
即可。
另外,还需要检查“提交修改的名称,是不是其它数据的名称”,则应该在AlbumMapper.java
接口中添加抽象方法:
int countByNameAndNotId(@Param("id") Long id, @Param("name") String name);
**提示:**在主流的Spring Boot项目中,以上注解@Param
并不是必须的!
并配置其映射的SQL语句:
<select id="countByNameAndNotId" resultType="int">
SELECT count(*) FROM pms_album WHERE name=#{name} AND id!=#{id}
</select>
完成后,在AlbumMapperTests
中编写并执行测试:
@Test
void countByNameAndNotId() {
Long id = 1L;
String name = "测试数据";
int count = mapper.countByNameAndNotId(id, name);
log.debug("统计不是【{}】但名称是【{}】的数据的数量,结果:{}", id, name, count);
}
2. 编辑相册--执行修改--Service层
在pojo.dto
下创建AlbumUpdateDTO
类,在类中声明允许修改的属性(name
/ description
/ sort
):
package cn.tedu.csmall.product.pojo.dto;
/**
* 修改相册基本数据的DTO类
*
* @author java@tedu.cn
* @version 0.0.1
*/
@Data
public class AlbumUpdateDTO implements Serializable {
/**
* 相册名称
*/
@ApiModelProperty(value = "相册名称", required = true)
private String name;
/**
* 相册简介
*/
@ApiModelProperty(value = "相册简介", required = true)
private String description;
/**
* 排序序号
*/
@ApiModelProperty(value = "排序序号", required = true)
private Integer sort;
}
在IAlbumService
中添加抽象方法:
/**
* 修改相册基本信息
* @param id 尝试修改的相册的id
* @param albumUpdateDTO 封装了新数据的对象
*/
void updateInfoById(Long id, AlbumUpdateDTO albumUpdateDTO);
在AlbumServiceImpl
中实现以上方法:
@Override
public void updateInfoById(Long id, AlbumUpdateDTO albumUpdateDTO) {
log.debug("开始处理【修改相册基本信息】的业务,参数ID:{},新数据:{}", id, albumUpdateDTO);
// 检查尝试修改的数据是否存在
Object queryResult = albumMapper.getStandardById(id);
if (queryResult == null) {
String message = "修改相册基本信息失败,尝试修改的数据不存在!";
log.warn(message);
throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
}
// 检查名称是否与别的相册数据冲突
int count = albumMapper.countByNameAndNotId(id, albumUpdateDTO.getName());
if (count > 0) {
String message = "修改相册基本信息失败,相册名称已经被别的数据占用!";
log.warn(message);
throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
}
// 创建Album对象
Album album = new Album();
// 将参数DTO的各属性复制到以上实体对象中
BeanUtils.copyProperties(albumUpdateDTO, album);
album.setId(id);
log.debug("即将修改数据:{}", album);
albumMapper.update(album);
}
在AlbumServiceTests
中编写并执行测试:
@Test
void updateInfoById() {
Long id = 1L;
AlbumUpdateDTO albumUpdateDTO = new AlbumUpdateDTO();
albumUpdateDTO.setName("测试数据");
albumUpdateDTO.setDescription("非关键数据");
albumUpdateDTO.setSort(100);
try {
service.updateInfoById(id, albumUpdateDTO);
log.debug("修改数据完成!");
} catch (ServiceException e) {
log.debug("修改数据失败!具体原因请参见日志!");
}
}
3. 编辑相册--执行修改--Controller层
// http://localhost:9080/albums/9527/update
@ApiOperation("修改相册基本信息")
@ApiOperationSupport(order = 300)
@ApiImplicitParam(name = "id", value = "相册ID", required = true, dataType = "long")
@PostMapping("/{id:[0-9]+}/update")
public JsonResult updateInfoById(@PathVariable Long id, AlbumUpdateDTO albumUpdateDTO) {
log.debug("开始处理【修改相册基本信息】的请求,参数ID:{},新数据:{}", id, albumUpdateDTO);
albumService.updateInfoById(id, albumUpdateDTO);
return JsonResult.ok();
}
个人主页:居然天上楼
感谢你这么可爱帅气还这么热爱学习~~
人生海海,山山而川
你的点赞👍 收藏⭐ 留言📝 加关注✅
是对我最大的支持与鞭策