1 后台商品新增、更新和删除
1.1 新增
1.1.1 封装SysResult
说明:在jt-common中添加系统返回值VO对象
package com.jt.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class SysResult {
private Integer status; //200成功,201失败
private String msg; //服务器返回提示信息
private Object data; //服务器数据
//1.编辑失败方法
public static SysResult fail(){
return new SysResult(201,"服务器调用失败",null);
}
//2.编辑成功方法
public static SysResult success(){
return new SysResult(200,"服务器调用成功",null);
}
public static SysResult success(Object data){
return new SysResult(200,"服务器调用成功",data);
}
public static SysResult success(String msg,Object data){
return new SysResult(200,msg,data);
}
}
1.1.2 编辑ItemController
/*
* 业务:完成商品的入库操作
* 注意事项:1.方法可能会出错,添加try-catch
* 2.新增商品的状态信息为1
* 3.入库时完成时间的记录
* url:http://localhost:8091/item/save
* 请求参数:form表单,对象接受
* 返回值:系统界别的vo对象
* */
@RequestMapping("/save")
public SysResult saveItem(Item item){
//方式一
/*try {
itemService.saveItem(item);
return SysResult.success();
}catch (Exception e){
e.printStackTrace();
return SysResult.fail();
}*/
//方式二:全局异常处理
itemService.saveItem(item);
return SysResult.success();
}
1.1.3 编辑ItemServiceImpl
@Override
public void saveItem(Item item) {
item.setStatus(1) //默认是正常状态
.setCreated(new Date())
.setUpdated(item.getCreated());
itemMapper.insert(item);
}
1.1.4 设置全局异常处理机制
在jt-common中 添加全局异常处理机制
package com.jt.aop;
import com.jt.vo.SysResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice //定义全局异常处理
public class SystemException {
//遇到运行时异常时方法执行.
@ExceptionHandler({RuntimeException.class})
public Object fail(Exception e){
e.printStackTrace(); //输出异常信息.
return SysResult.fail();
}
}
1.2 自动填充时间功能
1.2.1 业务需求
例如更新时间/创建时间,每个业务操作时都需要更新相关数据,能否将数据进行优化,简化程序调用。
1.2.2 指定填充属性
1.2.3 编辑配置类
在jt-common中 编辑配置类,实现自动填充功能
package com.jt.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component //将对象交给spring容器管理
public class MyMetaObjectHandler implements MetaObjectHandler {
//完成入库操作自动赋值
@Override
public void insertFill(MetaObject metaObject) {
Date date = new Date();
this.setFieldValByName("created",date,metaObject);
this.setFieldValByName("updated",date,metaObject);
}
//完成更新操作自动赋值
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updated",new Date(),metaObject);
}
}
2 修改更新操作
2.1 实现修改页面分类信息回显
2.1.1 显示分类名称
2.1.2 显示分类名称
2.2 实现更新
2.2.1 编辑ItemController
/*
* 业务:更新商品信息
* url:http://localhost:8091/item/update
* 请求参数:form表单
* 返回值:SysResult
* */
//更新
@RequestMapping("/update")
public SysResult updateItem(Item item){
itemService.updateItem(item);
return SysResult.success();
}
2.2.2 编辑ItemServiceImpl
//一般更新操作都是根据主键更新
//Sql: update tb_item set titel=#{xxxx},xx,x,x,x,x, where id=#{xxx}
@Override
public void updateItem(Item item) {
//根据对象中不为null的元素充当set条件
itemMapper.updateById(item);
}
3 商品删除操作
3.1 编辑ItemController
/*
* 业务:删除选中的商品
* url:http://localhost:8091/item/delete
* 请求参数:商品ids
* 返回值:SysResult
*
* */
//删除
@RequestMapping("/delete")
public SysResult deleteItem(Long[] ids){
itemService.deleteItem(ids);
return SysResult.success();
}
3.2 编辑ItemServiceImpl
@Override
public void deleteItem(Long[] ids) {
//方法一
// List<Long> idList = new ArrayList<>();
// for(Long id:ids){
// idList.add(id);
// }
// itemMapper.deleteBatchIds(idList);
//方法二:
// List<Long> longList = Arrays.asList(ids);
// itemMapper.deleteBatchIds(longList);
//方法二(手动sql):
itemMapper.deleteItem(ids);
}
3.3 编辑ItemMapper
//根据ids删除商品信息
void deleteItem(Long[] ids);
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jt.mapper.ItemMapper">
<!--Mybatis数据传参的原理:
规则: Mybatis只能接收单值传参!!!
如果有多个数据需要传值,则需要将多值封装为单值
方式:
1.利用对象传参
2.利用数组传参
3.利用Map集合传参
集合的写法:
数据类型是数组 collection="array"
数据类型是list集合 collection="list"
数据类型是Map集合 collection="map的key"
ids=100,101,102
collection: 获取传递集合的key
open="集合遍历前缀"
close="集合遍历后缀"
separator="分隔符"
item="当前遍历的对象"
-->
<!--根据ids删除商品信息-->
<delete id="deleteItem">
delete from tb_item where id in
<foreach collection="array"
open="("
close=")"
separator=","
item="id">
#{id}
</foreach>
</delete>
</mapper>
4 实现商品上架/下架操作
4.1 业务需求
需求: 能否利用一个方法实现上架/下架操作???
http://localhost:8091/item/updateStatus/2 下架操作 status=2
http://localhost:8091/item/updateStatus/1 上架操作 status=1
4.2 编辑ItemController
/*
*业务需求:实现商品的上架/下架
* url: /item/updateStatus/1
* 请求参数:状态码信息和ids
* 返回值:SysResult对象
*/
@RequestMapping("/updateStatus/{status}")
public SysResult updateStatus(@PathVariable Integer status, Long... ids){
itemService.updateStatus(status,ids);
return SysResult.success();
}
4.2 编辑ItemServiceImpl
//商品的上下架
@Override
public void updateStatus(Integer status, Long[] ids) {
//方法一
/*Item item = new Item();
item.setStatus(status);
UpdateWrapper updateWrapper = new UpdateWrapper();
updateWrapper.in("id",Arrays.asList(ids));
itemMapper.update(item,updateWrapper);
*/
//方法二(手动sql)
itemMapper.updateStatus(status,ids);
}
4.3 编辑ItemMapper
//商品的上下架
void updateStatus(Integer status, Long[] ids);
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jt.mapper.ItemMapper">
<!--商品的上下架-->
<update id="updateStatus">
update tb_item set status=#{status},updated=now() where id in
<foreach collection="ids"
open="("
close=")"
separator=","
item="id">
#{id}
</foreach>
</update>
</mapper>