SpringBoot part4 day04

1.页面结构

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="/js/jquery-easyui-1.4.1/themes/default/easyui.css" />
<link rel="stylesheet" type="text/css" href="/js/jquery-easyui-1.4.1/themes/icon.css" />
<link rel="stylesheet" type="text/css" href="/css/jt.css" />
<script type="text/javascript" src="/js/jquery-easyui-1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="/js/jquery-easyui-1.4.1/jquery.easyui.min.js"></script>
<script type="text/javascript" src="/js/jquery-easyui-1.4.1/locale/easyui-lang-zh_CN.js"></script>
</head>
<body class="easyui-layout">

  <div data-options="region:'west',title:'菜单',split:true" style="width:10%;">
   		<ul class="easyui-tree">
   			<li>
   			<span>商品管理</span>
   			<ul>
   			<li><a onclick="addTab('商品新增','/item-add')">商品新增</a></li>
   			<li><a onclick="addTab('商品查询','/item-list')">商品查询</a></li>
   			<li><a onclick="addTab('商品更新','/item-update')">商品更新</a></li>
   			</ul>
			</li>
			
			<li>
   			<span>网站内容管理</span>
   			<ul>
   			<li>内容新增</li>
   			<li>内容修改</li>
   			</ul>
			</li>
   		
   		</ul>
   </div>
   <div id="tt" class="easyui-tabs" data-options="region:'center',title:'首页'"></div>


</body>
<script type="text/javascript">
function addTab(title, url){  
    if ($('#tt').tabs('exists', title)){
        $('#tt').tabs('select', title);
    } else {
        var url2 = "https://map.baidu.com/@12964432.517776728,4826375.366248961,13z";
        var content = '<iframe scrolling="auto" frameborder="0"  src="'+url2+'" style="width:100%;height:100%;"></iframe>';
        $('#tt').tabs('add',{
            title:title,  
            content:content,  
            closable:false
        });  
    }
}

</script>

</html>

2.商品列表的展现

2.1pojo

商品item

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  存入数据库用整数,但是页面展现使用小数(小数运算不精确而且存储麻烦)
	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(",");
	}
}

2.2UI列表的展现
在这里插入图片描述
在这里插入图片描述
页面json抽取为类的过程
在这里插入图片描述

2.3JSON串的说明

2.3.1什么是JSON(json本质是String)
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。 JSON本质是String
2.3.2JSON的基本类型
1.object 对象的格式 名称/值 对的集合 是无序
在这里插入图片描述
2.数组 值的有序集合

[1,2,3,4,"打游戏""逛街"]

基本类型两种,延申出嵌套格式(值的嵌套)
在这里插入图片描述

{"id":1,"name":"白雪公主","hobbys":["逛街","看电视","打游戏"],"method":[{"id":1,"type":[{"id":1,"method":[{"id":1,"method":"自己走路"}]}]}]}

在这里插入图片描述

{"id"1,"name":"哈利珀特","hobbys":["学魔法","打伏地","敲代码"],"method":[{"type":"火系""name":"三味真火"}]}

json严格条件下字符串要加引号

2.4表格数据展现的说明

2.4.1编写EasyUITable Vo对象
在这里插入图片描述
编辑EasyUITable VO对象

package com.jt.vo;

import com.jt.pojo.Item;
import jdk.internal.dynalink.ChainedCallSite;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.List;
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class EasyUITable {
    /**
     * 记录总数
     * */
    private Long total;
    /**
     * 每页展现的记录
     * */
    private List<Item> rows;


}

通过对象的get()方法获取JSON属性及属性值
JSON转化为对象时,通过对象的set()方法为属性赋值

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  存入数据库用整数,但是页面展现使用小数(小数运算不精确而且存储麻烦)
	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(",");
	}
}

2.4.2 controller

@RequestMapping("testVO")
	public EasyUITable testVO(){
		Item item1=new Item();
		item1=item1.setId(1000L).setTitle("饮水机").setPrice(2000L);
		Item item2=new Item();
		item2.setId(2000L).setTitle("电冰箱").setPrice(30000L);
		List<Item> rows=new ArrayList<>();
		rows.add(item1);
		rows.add(item2);

return new EasyUITable(2000L, rows);

	}

说明:对象转化为json用get()方法,json转化为对象用set()方法

2.4.3 页面请求

表格页面分析:
说明:当添加了分页插件之后,当ajax程序解析时会动态的拼接参数.
在这里插入图片描述
ItemController

package com.jt.controller;

import com.jt.pojo.Item;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController //表示返回的都是json
@RequestMapping("/item")
public class ItemController {
	
	@Autowired
	private ItemService itemService;

    @RequestMapping("/query")
	@ResponseBody
	public EasyUITable doFindItemByPage(Integer page,Integer rows){
     return itemService.findItemByPage(page,rows);


	}
	
	
}

1.手写SQL查询
ItemServiceImpl

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;


	@Override
	public EasyUITable findItemByPage(Integer page, Integer rows) {

		long total=itemMapper.selectCount(null);
		int startIndex=(page-1)*rows;
		List<Item> itemList = itemMapper.findItemByPage(startIndex,rows);



		return new EasyUITable(total, itemList);
	}
}

ItemMapper

package com.jt.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.Item;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface ItemMapper extends BaseMapper<Item>{
    @Select("select * from tb_item order by updated desc limit #{startIndex},#{rows}")
    List<Item> findItemByPage(int startIndex, Integer rows);
}

2.使用MybatisPlus

@Override//使用MybatisPlus
	public EasyUITable findItemByPage(Integer page, Integer rows) {
		QueryWrapper queryWrapper=new QueryWrapper();
		queryWrapper.orderByDesc("updated");
		IPage<Item> iPage=new Page<>(page,rows);//IPage是接口,Page是实现的类
		//根据分页模型执行分页操作,并将结果返回给分页对象
		iPage=itemMapper.selectPage(iPage, queryWrapper);
		Long total=iPage.getTotal();//由分页工具自动获取,获取记录总数
		List<Item> itemList=iPage.getRecords();//获取查询当前页

		return new EasyUITable(total, itemList);
	}

需要增加配置类
在这里插入图片描述

package com.jt.config;

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

@Configuration//bean标签使用
public class MybatisPlusConfig {
   //讲分页拦截器交给spring管理  MP是Mybatis的增强工具
    @Bean
    public PaginationInterceptor paginationInterceptor(){

        return new PaginationInterceptor();
    }

}

在这里插入图片描述
在这里插入图片描述

2.5数据格式化

2.5.1格式化价格
在这里插入图片描述
在这里插入图片描述
formatter:KindEditorUtil

2.5.2格式化状态:

在这里插入图片描述
2.5.3实现商品分类的回显
说明:
在这里插入图片描述
编辑Item-list页面
在这里插入图片描述
在这里插入图片描述
改为
在这里插入图片描述
ItemCat

package com.jt.pojo;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;

@Data
@TableName("tb_item_cat")
@Accessors(chain = true)
public class ItemCat extends BasePojo{
    @TableId
    private Long id;         //主键
    private Long parentId;   //父级ID
    private String name;       //父级
    private Integer status;     //状态信息
    private Integer sortOrder;   //排序号
    private Boolean isParent;   //是否为父级  tinyint用boolean进行转化
    
}

BasePojo

package com.jt.pojo;

import java.io.Serializable;
import java.util.Date;

import lombok.Data;
import lombok.experimental.Accessors;

//pojo基类,完成2个任务,2个日期,实现序列化
@Data
@Accessors(chain=true)
public class BasePojo implements Serializable{
	private Date created;
	private Date updated;

}

在这里插入图片描述
有了这个注解不用每个都写@Mapper

package com.jt.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.ItemCat;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface ItemCatMapper extends BaseMapper<ItemCat> {

}

在这里插入图片描述

package com.jt.service;

import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ItemCatServiceImpl implements ItemCatService{
   @Autowired
   private ItemCatMapper itemCatMapper;

    @Override
    public ItemCat findItemCatName(Integer id) {
        return itemCatMapper.selectById(id);
    }


}

package com.jt.controller;

import com.jt.pojo.ItemCat;
import com.jt.service.ItemCatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/item/cat")
public class ItemCatController {
    @Autowired
    private ItemCatService itemCatService;
    @RequestMapping("/queryItemName")
    @ResponseBody
    public String doFindItemCat(Integer itemCatId){
       // System.out.println("itemCat获取id:"+itemCatId);
        ItemCat itemCat=itemCatService.findItemCatName(itemCatId);
        //System.out.println(itemCat.getName()+"--------------");
        return itemCat.getName();
    }

}

每条数据都需要与后台进行一次交互,效率低(缓存)

2.6Ajax嵌套问题

在这里插入图片描述
若改为异步:false
在这里插入图片描述
页面数据不会显示
原因:页面一共发两次ajax请求,并且两次请求是嵌套关系,页面只刷新一次
解决办法:将第二次的ajax请求改为同步
在这里插入图片描述
扩展知识:JS中闭包问题

3 树形结构的展现

3.1common.js的依赖问题

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.2商品分类的业务分析

一般情况下,结构分为三级
在这里插入图片描述
在这里插入图片描述
layUI
在这里插入图片描述
elementUI
在这里插入图片描述

3.3树形结构的问题

3.3.1页面js
在这里插入图片描述
3.3.2json结构
在这里插入图片描述
3.3.3 EasyUITree对象的封装

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 EasyUITree {

    private Long id;//数据库id为long类型
    private String text;//定义节点名称
    private String state;//节点状态信息

}

在这里插入图片描述

3.4新增页面的分析

3.4.1页面流转过程

3.4.2页面流转分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于参数异常问题(Mybatis版本较低)

mybatis允许单值传参,不允许多值传参,将多值封装成单值,就是封装成map集合
底层sql:#{}取值,获取的是key,然后获取value
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值