1.商品后臺管理
1.1 商品新增
1.1.1 頁面分析
1.url分析

2.引數分析

- 頁面JS編輯
function submitForm(){
//表單校驗
if(!$('#itemAddForm').form('validate')){
$.messager.alert('提示','表單還未填寫完成!');
return ;
}
//轉化價格單位,將元轉化為分
//$("#price").val(); 取值 $("#price").val(100);
//eval() 專門做算數計算的 1+1 "1"+1
$("#itemAddForm [name=price]").val(eval($("#itemAddForm [name=priceView]").val()) * 100);
itemAddEditor.sync();//將輸入的內容同步到多行文本中
$.post("/item/save",$("#itemAddForm").serialize(), function(data){
if(data.status == 200){
$.messager.alert('提示','新增商品成功!');
}else{
$.messager.alert("提示","新增商品失敗!");
}
});
}
1.1.2 封裝SysResult
說明:在jt-common中添加系統回傳值VO物件
package com.jt.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
//作用: 指定系統回傳值vo物件,與前端進行互動
@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.3 編輯ItemController
/**
* 業務需求:
* 完成商品入庫操作.
* 注意事項:
* 1. 防止方法出錯添加try-catch
* 2. 新增商品的狀態資訊 為1
* 3. 入庫操作時 完成時間的記錄.
* 請求引數:
* 1.url地址:/item/save
* 2.請求引數: form表單 物件接收
* 3.回傳值: 系統級別的VO物件
*
* 知識復習:
* input name="age" value=18
*/
@RequestMapping("/save")
public SysResult saveItem(Item item){
try {
itemService.saveItem(item);
return SysResult.success();
}catch (Exception e){
e.printStackTrace();
return SysResult.fail();
}
}
1.1.4 編輯ItemService
@Override
public void saveItem(Item item) {
item.setStatus(1) //默認是正常狀態
.setCreated(new Date())
.setUpdated(item.getCreated());
itemMapper.insert(item);
}
1.2 全域例外處理機制說明
說明:在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.3 自動填充功能
1.3.1 業務需求
例如更新時間/創建時間,每個業務操作時都需要更新相關資料,能否將資料進行優化,簡化程式呼叫.

1.3.2 編輯BasePOJO 指定填充屬性

1.3.2 編輯配置類
說明:在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);
}
}
1.4 商品修改操作
1.4.1 頁面分析
{
text:'編輯',
iconCls:'icon-edit',
handler:function(){
//獲取用戶選中的資料
var ids = getSelectionsIds();
if(ids.length == 0){
$.messager.alert('提示','必須選擇一個商品才能編輯!');
return ;
}
if(ids.indexOf(',') > 0){
$.messager.alert('提示','只能選擇一個商品!');
return ;
}
//需要找到一個空的div之后展現視窗
$("#itemEditWindow").window({
onLoad :function(){
//回顯資料
var data = $("#itemList").datagrid("getSelections")[0];
data.priceView = KindEditorUtil.formatPrice(data.price);
//將data的資料回顯到修改頁面中.
$("#itemeEditForm").form("load",data);
.....
}
1.4.2 實作修改頁面分類資訊回顯

知識回顧:
說明:可以通過商品分類Id,動態獲取商品分類的名稱.請求路徑按照圖中標識.
3.編輯頁面JS

1.4.3 商品修改的ajax

1.4.4 編輯ItemController
/**
* 實作商品修改操作
* 1.url地址: /item/update
* 2.請求引數: form表單提交
* 3.回傳值: SysResult物件
*/
@RequestMapping("/update")
public SysResult updateItem(Item item){
itemService.updateItem(item);
return SysResult.success();
}
1.4.5 編輯ItemService
//一般更新操作都是根據主鍵更新
//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);
}
1.5 商品洗掉操作
1.5.1 頁面url分析

2.引數提交

3. 頁面JS分析

1.5.2 編輯ItemController
/**
* 業務需求: 洗掉商品資訊
* 1.url地址: /item/delete
* 2.引數: ids: 100,101,102 serlvet(request) 同名提交問題
* 3.回傳值: SysResult
* springMVC規則: 如果傳遞的資料是由,號分隔的字串則可以使用陣列接收
* */
@RequestMapping("/delete")
public SysResult deleteItems(Long... ids){
//1.將ids字串按照,號拆分
itemService.deleteItems(ids);
return SysResult.success();
}
1.5.3 編輯ItemService
//批量洗掉操作
@Override
public void deleteItems(Long[] ids) {
//List<Long> longList = Arrays.asList(ids);
//itemMapper.deleteBatchIds(longList);
//手動的洗掉資料
itemMapper.deleteItems(ids);
}
1.5.4 編輯ItemMapper

<?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="當前遍歷的物件"
-->
<delete id="deleteItems" >
DELETE FROM tb_item WHERE id in (
<foreach collection="array" item="id" separator=",">
#{id}
</foreach>
)
</delete>
</mapper>
1.6 實作商品上架/下架操作
1.6.1 業務需求
說明:如果修改商品的狀態資訊. 上架=1 下架=2. 只需要修改資料庫記錄即可.

url分析:
http://localhost:8091/item/instock 下架操作 status=2
http://localhost:8091/item/reshelf 上架操作 status=1
需求: 能否利用一個方法實作上架/下架操作???
http://localhost:8091/item/updateStatus/2 下架操作 status=2
http://localhost:8091/item/updateStatus/1 上架操作 status=1
1.6.2 修改頁面JS
說明:將頁面上架/下架操作,按照上述分析進行修改.

1.6.3 編輯ItemController
/**
* 業務: 實作商品的上架/下架
* url地址: /item/updateStatus/2
* 引數: 狀態碼資訊/ids
* 回傳值: SysResult物件
* */
@RequestMapping("/updateStatus/{status}")
public SysResult updateStatus(@PathVariable Integer status,Long... ids){
itemService.updateStatus(ids,status);
return SysResult.success();
}
1.6.3 編輯ItemService
//作業:sql手動完成
//引數說明: entity:修改資料的值 updateWrapper
@Override
public void updateStatus(Long[] ids, Integer status) {
Item item = new Item();
item.setStatus(status);
//where id in (1,2,3,4)
UpdateWrapper<Item> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("id",Arrays.asList(ids));
itemMapper.update(item,updateWrapper);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/204119.html
標籤:java
