JT-day05

1、京淘商品后台管理实现

1.1 商品列表展现

1.1.1 商品POJO对象

package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.experimental.Accessors;
@JsonIgnoreProperties(ignoreUnknown=true) //表示JSON转化时忽略未知属性
@TableName("tb_item")
@Data
@Accessors(chain=true)
public class Item extends BasePojo{
   @TableId(type=IdType.AUTO)    //主键自增
 private Long id;            //商品id
 private String title;        //商品标题
 private String sellPoint;     //商品卖点信息
 private Long   price;        //商品价格 Long > dubbo       Double精度问题
 private Integer num;         //商品数量
 private String barcode;          //条形码
 private String image;        //商品图片信息 1.jpg,2.jpg,3.jpg private Long   cid;             //表示商品的分类id
 private Integer status;          //1正常,2下架
 //为了满足页面调用需求,添加get方法
 public String[] getImages(){
      
      return image.split(",");
   }
}

1.1.2 表格数据页面结构

商品ID 商品标题 叶子类目 卖点 价格 库存数量 条形码 状态 创建日期 更新日期

1.1.3 请求URL地址

说明:如果采用UI框架并且添加了分页插件,则会自动的形成如下的URL请求地址
JT-day05_第1张图片

1.1.4 编辑ItemController

package com.jt.controller;

import com.jt.vo.EasyUITable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.jt.service.ItemService;
import org.springframework.web.bind.annotation.RestController;

@RestController    //返回值都是JSON数据
@RequestMapping("/item")
public class ItemController {
    
    @Autowired
    private ItemService itemService;

    /**
     * 业务需求:
     *     以分页的形式查询商品列表信息.
     * 业务接口文档:
     *      url地址: http://localhost:8091/item/query?page=1&rows=20
     *         参数信息:  page 当前页数    rows 每页展现的行数
     *         返回值:  EasyUITable对象
     *      方法1:  手写sql方式实现分页
     *      方法2:  利用MP方式实现分页
     */
    @RequestMapping("/query")
    public EasyUITable findItemByPage(int page,int rows){

        return  itemService.findItemByPage(page,rows);
    }
    
    
}

1.1.5 编辑ItemService

package com.jt.service;

import com.jt.pojo.Item;
import com.jt.vo.EasyUITable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jt.mapper.ItemMapper;

import java.util.List;

@Service
public class ItemServiceImpl implements ItemService {
    
    @Autowired
    private ItemMapper itemMapper;


    /*
    SELECT * FROM tb_item LIMIT 0, 20   /*第一页 0-19
    SELECT * FROM tb_item LIMIT 20,20   /*第二页 20-39
    SELECT * FROM tb_item LIMIT 40,20   /*第三页 40-59
    SELECT * FROM tb_item LIMIT (page-1)*ROWS,ROWS  40-59*/

    /**
     * 1.后端查询数据库记录
     * 2.将后端数据通过业务调用转化为VO对象
     * 3.前端通过VO对象的JSON进行数据的解析
     *
     *执行的sql:
     *     select * from tb_item  order by updated  desc LIMIT 0, 20
     * @param page
     * @param rows
     * @return
     */
    @Override
    public EasyUITable findItemByPage(int page, int rows) {
        //1.total  获取数据库总记录数
        long total = itemMapper.selectCount(null);
        //2.rows   商品分页查询的结果
        int startNum = (page-1)*rows;
        List itemList = itemMapper.findItemByPage(startNum,rows);
        //3.将返回值结果封装
        return new EasyUITable(total,itemList);
    }
}

1.1.6 编辑ItemMapper

手动编辑分页操作

public interface ItemMapper extends BaseMapper{

    //注意事项: 以后写sql语句时 字段名称/表名注意大小写问题.
    @Select("SELECT * FROM tb_item  ORDER BY updated  DESC LIMIT #{startNum}, #{rows}")
    List findItemByPage(int startNum, int rows);
}

1.1.7 MybatisPlus实现分页查询

编辑业务调用

@Service
public class ItemServiceImpl implements ItemService {
    
    @Autowired
    private ItemMapper itemMapper;

    @Override
    public EasyUITable findItemByPage(int page, int rows) {
        //1.需要使用MP的方式进行分页
        IPage iPage = new Page<>(page,rows);
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("updated");
        //MP通过分页操作将分页的相关数据统一封装到IPage对象中
        iPage = itemMapper.selectPage(iPage,queryWrapper);
        return new EasyUITable(iPage.getTotal(),iPage.getRecords());
    }
}

1.1.8 编辑MybatisPlus配置类

说明:在jt-common中添加MP的配置文件

package com.jt.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration  //标识配置类
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

}

2、商品分类目录实现

2.1 封装POJO对象

package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
@TableName("tb_item_cat")
@Data
@Accessors(chain = true)
public class ItemCat extends BasePojo{
    @TableId(type = IdType.AUTO)
    private Long id;                //主键ID
 private Long parentId;          //父级ID
 private String name;            //分类名称
 private Integer status;         //状态
 private Integer sortOrder;      //排序号
 private Boolean isParent;       //是否为父级
}

2.2 页面JS引入过程

2.2.1 引入JS/CSS过程

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>








2.2.2 引入common.jsp