CGB2005 0831 jt5

0831 江哥链接 https://blog.csdn.net/qq_16804847/article/details/108315987
day05
问题归纳总结
在这里插入图片描述
在这里插入图片描述
子类继承父类=属性/方法/属性的值
父类:属性-private修饰
在这里插入图片描述
如上图 属性私有 但是方法公有可以被继承
方法被引入后 我们需要操作方法 方法需要操作 就需要属性的赋值 值从哪来?
在这里插入图片描述
在类中 虚拟化的 内存中多出来两个属性 一个是updated 一个是created 只有继承了父级
不可能给方法做空赋值

动态生成属性,只要子类继承了父类,可以通过方法为自己赋值
继承是继承属性的值
在这里插入图片描述

私有之后 只有方法的地方 内存会虚拟化一份份属性由方法为属性(内存动态生成的)赋值
在这里插入图片描述
在这里插入图片描述
晚上9.22前

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

那个项目需要单独的运行 发布 pom就加build标签 或者install打包

复习开始

结构理清 按规定套路 itemcontroller的那张图

与前端交互最关键的
看url(network)和页面需要的
在这里插入图片描述
在这里插入图片描述
还有 我们需要返回什么(controller层)

有逆向思维 要从前端给的json串 转化成vo层

看括号就好
在这里插入图片描述

在这里插入图片描述
如上图 而且value可以做无限层级的嵌套

用别人的工具 返回值固定(按别人的要求写) 不然无法解析

总结的顺序 实际最重要的 如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

先写返回值 根据类型 通过自己的方法 然后无限趋近返回值的结果
要啥可以自己去写 利用API
9.48 晚上或者中午回看 一句话
在这里插入图片描述
然后控制层 controller层
在这里插入图片描述
返回值就变成了一个json 因为@RestController
0831开始正式

商品分类信息回显

1.1 数据格式化问题

在这里插入图片描述

Item的POJO问题说明

分析pojo
在这里插入图片描述

在这里插入图片描述

商品价格为啥是long类型 (不引入新问题 解决就问题)
整数快 比double快
精度问题 9.57 引入一个???
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1.2 格式化价格

1).页面标识符
formatter 属性是EasyUI中专门负载格式化数据的函数.通过调用js.将返回值的结果进行展现.
传递参数时会传递2个参数. 一个是当前标签的值value.当前标签所在的行号.
easyUI可以进行动态的回显 但是需要和pojo保持一致

<th data-options="field:'price',width:70,align:'right',formatter:KindEditorUtil.formatPrice">价格</th>

格式化函数介绍:
// 格式化价格
	formatPrice : function(val,row){
		return (val/100).toFixed(2);
	},

在这里插入图片描述

在这里插入图片描述
如上图 试试删掉matter 缩小100倍的问题 10.06前
调用了js

1.1.3 格式化状态

1.页面JS函数调用

<th data-options="field:'status',width:60,align:'center',formatter:KindEditorUtil.formatItemStatus">状态</th>

在这里插入图片描述

引入js 1.1.2上面 看博客 复制
去common.js看具体的

在这里插入图片描述
没有引js是怎么调用通畅的呢
跳转的时候已经有包括js了

1.1.2 common.js是如何被item-list.jsp所引用的???

在这里插入图片描述
说明: 由于用户默认的首页访问的是Index.jsp,在其中引入js
在这里插入图片描述
引入js的过程
在这里插入图片描述
补充说明: 由于item-list.jsp页面是index.jsp中的一部分.所以父级引入JS.子级也可以使用JS.
局部可以用整体 10.25 晚上(over)

在这里插入图片描述
用的化只用了val 没用row

结束

页面的js函数调用
1.1.3对应标题 插入

1.1.3 也是格式化状态

在这里插入图片描述

1.页面JS函数调用

<th data-options="field:'status',width:60,align:'center',formatter:KindEditorUtil.formatItemStatus">状态</th>

在这里插入图片描述
在这里插入图片描述
如上 用户看不清楚

所以

2.js编辑说明

// 格式化商品的状态
	formatItemStatus : function formatStatus(val,row){
        if (val == 1){
            return '<span style="color:green;">上架</span>';
        } else if(val == 2){
        	return '<span style="color:red;">下架</span>';
        } else {
        	return '未知';
        }
    },

在这里插入图片描述
在这里插入图片描述
刷新
在这里插入图片描述
更好的说明了

1.2 商品分类回显

1.2.1 页面结构分析

在这里插入图片描述
需求说明: 如果在没有进行格式化时.展现的是商品分类的ID号.如图:
在这里插入图片描述
去掉formatter:KindEditorUtil.findItemCatName 后
在这里插入图片描述
需求 展现具体需求的名字

需要通過格式化的函数,动态获取商品分类的名称,之后进行页面展现.
在这里插入图片描述

<th data-options="field:'cid',width:100,align:'center',formatter:KindEditorUtil.findItemCatName">叶子类目</th>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
560手机标签

1.2.2 页面业务实现的说明 (叶子类目)

1.利用格式化的函数的调用 向后端发送ajax请求.获取商品分类的名称
2.创建商品分类的POJO对象 ItemCat对象
3.创建ItemCatMapper 接口
4.实现通过数据库查询返回itemCat的name属性.

在这里插入图片描述

前端对应都写好了

标识页面的ajax

在这里插入图片描述

 //格式化名称
    findItemCatName : function(val,row){
    	var name;
    	$.ajax({
    		type:"post",
    		url:"/item/cat/queryItemName",
    		data:{itemCatId:val},
    		cache:true,    //缓存
    		async:false,    //表示同步   默认的是异步的true
    		dataType:"text",//表示返回值参数类型
    		success:function(data){ //返回商品分类名称
        		name = data;
        	}
    	});
    	return name;
	},

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

在这里插入图片描述
开始写pojo
在这里插入图片描述
为什么ItemCat放jt-common
common不止一个人用 前端也可能用到common 所以公共的东西就往common放
如下
在这里插入图片描述

晚上回看自己录得 重

在这里插入图片描述

在这里插入图片描述
从格式化 formatXXXX()
在这里插入图片描述

去进行数据格式化的访问

需求 展示1和2 客户不理解 铺垫业务
在这里插入图片描述

第一步

关键技巧 1.不过是什么业务 根据上图的需求 先把层级代码写完 并作脚手架

在这里插入图片描述

如上图 有对象必有数据库

dao层(Mapper 集合到一起了)

service层

controller层

然后脚手架做好了

**

第二部:再分析业务 service层(业务逻辑层)

**
在这里插入图片描述
在这里插入图片描述
如上分析
在这里插入图片描述
在这里插入图片描述

第三步 干活

从controller层开始写
在这里插入图片描述
如上图 改为/item/cat
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

dao层
在这里插入图片描述
脚手架第二部就写了 没语句即可???疑问

11.16回放 怎么从controller引出接口 和上面的getName (over)

小点
在这里插入图片描述
在这里插入图片描述
自我实现 客户端
在这里插入图片描述

分析改了async 同步异步问题

//格式化名称
    findItemCatName : function(val,row){
    	var name;
    	$.ajax({
    		type:"post",
    		url:"/item/cat/queryItemName",
    		data:{itemCatId:val},
    		cache:true,    //缓存
    		async:true,    //表示同步   默认的是异步的true
    		dataType:"text",//表示返回值参数类型
    		success:function(data){
        		name = data;
        	}
    	});
    	return name;
	},

在这里插入图片描述
改成true

ajax嵌套问题

说明:如果在页面中涉及到ajax嵌套问题,一般的解决的方法就是将内层的ajax设置为同步模式.可以正确的展现数据.

说明 页面发起了
在这里插入图片描述
第二次 晚上 11.35前

在这里插入图片描述
不可能一次性展现 只能一行一行
又发起了ajax请求在这里插入图片描述

叶子类目 数据有 再这个数据的背后 加载好之后已经错过了
需要一次刷新! 11.41 晚上 再理解一次
同步才能好一点

在这里插入图片描述
保证内部数据一切正常
改回去
在这里插入图片描述
总结
在这里插入图片描述
因为一个查询只刷新一次
在这里插入图片描述
晚上总结
在这里插入图片描述

如上图 查询页面 ajax可是一共发起了几次请求 2次

第一次 展示所有列表的时候 用url把所有数据分页显示出来那个
第二次 叶子类目为第二次异步
在这里插入图片描述
第二次展示数据的异步展现 一行一行展现 解析第一行的时候(有ajax) 不会被堵塞 叶子类目空白则绕开
因为一条一条数据显示出来 为异步 叶子类目处理完了数据 车开走了 (如下图)只欠缺一次刷新 改成同步的话 即可 就可以等叶子类目更新后 再执行下一行的查询

在这里插入图片描述

新增


点击会有弹出框

分析
在这里插入图片描述

src/main/webapp/easy-ui/easyui-5-window.html

效果
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
看懂在写什么
想进行弹出框的展现
在这里插入图片描述
在这里插入图片描述
退出按钮
在这里插入图片描述
function为返回值的结果 r代表确定或取消
在这里插入图片描述

回看 晚上 11.52(over)

问题

在这里插入图片描述
分析京东
一般分3级
在这里插入图片描述
蓝色是定位

在这里插入图片描述
涉及到父子级关系时 一般采用parentId的形式进行关联
在这里插入图片描述
试着
在这里插入图片描述
一级的时候 parentId=0
在这里插入图片描述
二级 父级应该是parentId=0
在这里插入图片描述
在这里插入图片描述
说明:一般电商网址的商品分类信息一般都是3级菜单. 级与级之间存在父子级关系. 在数据库中应该如何存储???
解答: 一般涉及到父子级关系时,一般采用parentId的形式进行关联.
例如: 查询一级商品分类信息:

/*查询一级商品分类信息 父级Id=0*/
select * from tb_item_cat where parent_id=0;
/*查询二级商品分类信息 父级一级ID*/
SELECT * FROM tb_item_cat WHERE parent_id=1;
/*查询三级商品分类信息 父级二级ID*/
SELECT * FROM tb_item_cat WHERE parent_id=2;

在这里插入图片描述

树形结构讲解

页面分析

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

/*通过js创建树形结构 */
	$(function(){
		$("#tree").tree({
			url:"tree.json",		//加载远程JSON数据
			method:"get",			//请求方式  POST
			animate:true,			//表示显示折叠端口动画效果
			checkbox:true,			//表述复选框
			lines:true,				//表示显示连接线
			dnd:true,				//是否拖拽
			onClick:function(node){	//添加点击事件
				
				//控制台
				console.info(node);
			}
		});
	})
</script>
</head>
	<body>
		<h1>EasyUI-树形结构</h1>
		
		<ul id="tree"></ul>
	</body>
</html>

## **```关于树形结构的UI框架**
json串的返回值的分析

```java
[
	{
		"id":"1",
		"text":"英雄联盟",
		"iconCls":"icon-save",
		"children":[
			{
				"id":"4",
				"text":"沙漠死神"
			},{
				"id":"5",
				"text":"德玛西亚"
			},{
				"id":"6",
				"text":"诺克萨斯之手"
			},
			{
				"id":"7",
				"text":"蛮族之王"
			},
			{
				"id":"8",
				"text":"孙悟空"
			}
		],
		"state":"open"
	},{
		"id":"2",
		"text":"王者荣耀",
		"children":[
			{
				"id":"10",
				"text":"阿科"
			},{
				"id":"11",
				"text":"吕布"
			},{
				"id":"12",
				"text":"陈咬金"
			},{
				"id":"13",
				"text":"典韦"
			}
		],
		"state":"closed"
	},
	{
		"id":"3",
		"text":"吃鸡游戏",
		"iconCls":"icon-save"
	}
]

数组 数组配置节点 开放还是关闭

如下图 json串自己判断的时候 还得分析 比如"children"和"iconCls"是不需要考虑得 框架处理

在这里插入图片描述
需要一个一个封装
在这里插入图片描述

封装EasyUITree vo对象

在这里插入图片描述
数据来源是数据表
在这里插入图片描述
在这里插入图片描述
判断state节点打开还是闭合
在这里插入图片描述
在这里插入图片描述

分析结构(参照京东)

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

url页面展示说明

在这里插入图片描述
如上 都遍历xxxx
在这里插入图片描述

和点添加的时候 url一样
在这里插入图片描述
点击选择类目的时候
在这里插入图片描述

编辑itemcatcontroller 依旧三板斧

1.分析业务需求
实现商品分类的展现
url地址:http://localhost:8091/item/cat/list
参数:parentId=0 查询一级商品分类菜单
返回值结果: List
在这里插入图片描述
在这里插入图片描述
试着自我实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查询都是一级
自我实现
先有json后有vo

//该对象的主要的目的是为了展现树形结构的数据.
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class EasyUITree implements Serializable {
    //"id":"3","text":"吃鸡游戏","state":"open/closed" 数据来源 数据表
    private Long id;       //商品分类的Id信息
    private String text;   //商品分类name属性
    private String state;  //由是否为父级决定 如果是父级则关闭closed 否则为子级open
}

对接到数据库
脚手架
建好后
分析需求
在这里插入图片描述
上面发出后 去接
controller层
在这里插入图片描述
service层
在这里插入图片描述
里面同时加入了Dao层的数据持久层 面向对象去操作数据库语句
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
错误
1.controller没写requestMapping()里面的url 一开始需求还没弄懂
2.没用add存在内存的数据
在这里插入图片描述

在这里插入图片描述
显示成功

ps:显示端口号被占用
idea结束就可 直接关闭
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
晚上 foreach遗忘

讲解 15.46 水果沙拉

商品查询的url分析

点开都是一级菜单信息

三级商品信息分类目录的展现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

异步树空间的加载

在这里插入图片描述
2.3.8 异步树控件加载
树控件读取URL。子节点的加载依赖于父节点的状态。当展开一个封闭的节点,如果节点没有加载子节点,它将会把节点id的值作为http请求参数并命名为’id’,通过URL发送到服务器上面检索子节点。
总结:当展现了树形结构之后,当展开树形节点时会向后台传递该节点的id值格式如下 id:100

/**
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为空的话就代表第一次打开
在这里插入图片描述

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

/**
     * 业务需求: 实现商品分类的展现
     * url地址: http://localhost:8091/item/cat/list
     * 参数:    parentId = 0  查询一级商品分类菜单.
     * 返回值结果: List<EasyUITree>
     */
    @RequestMapping("/list")
    public List<EasyUITree> findItemCatList(Long id){
        //当初始时树形结构没有加载不会传递ID,所以ID为null.只需要传递0.
        Long parentId = (id==null)?0:id;
        return itemCatService.findItemCatList(parentId);
    }

在这里插入图片描述
不加children是因为整体更新会很耗资源 一个一个更新即可

后台维护

商品新增
在这里插入图片描述
在这里插入图片描述
业务说明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述系统级别的vo 写在commnon最合适 状态

vo 方法重载 方便调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么写long 不写int
在这里插入图片描述

@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class SysResult implements Serializable {
    private Integer status;         //定义状态信息 200业务处理成功, 201业务处理失败.
    private String  msg;            //服务器返回的提示信息.
    private Object  data;           //服务器返回业务数据.

    //封装一些静态API 简化用户调用过程.
    public static SysResult fail(){

        return new SysResult(201,"服务器调用失败",null);
    }

    public static SysResult success(){

        return new SysResult(200, "业务执行成功!!!", null);
    }

    public static SysResult success(Object data){

        return new SysResult(200, "业务执行成功!!!", data);
    }
}

页面的url参数

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

ajax
在这里插入图片描述
提交函数
校验机制
在这里插入图片描述

//表单校验
		if(!$('#itemAddForm').form('validate')){
			$.messager.alert('提示','表单还未填写完成!');
			return ;
		}
		//转化价格单位,将元转化为分
		$("#itemAddForm [name=price]").val(eval($("#itemAddForm [name=priceView]").val()) * 100);
		itemAddEditor.sync();//将输入的内容同步到多行文本中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
扩大100倍的结果 如上图

在这里插入图片描述

序列化

1.json方式
在这里插入图片描述
在这里插入图片描述
满足提交100个的需求
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
ajax可以解析
在这里插入图片描述

完成商品入库操作

商品的业务逻辑 ItemController
三板斧开始
拦截商品信息即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全局异常的处理机制
service层
在这里插入图片描述
在这里插入图片描述
从前台到后台的交互

自我实现 需求分析好后

分析json–vo----脚手架—分析业务逻辑—
controller层

在这里插入图片描述
service层
在这里插入图片描述
在这里插入图片描述
完成
客户端页面

在这里插入图片描述
控制事务
在这里插入图片描述
1.业务优化

在这里插入图片描述
在这里插入图片描述
自己测试 看下提交错误后 数据库还有记录吗

写进去了
出现了问题 事务没有得到控制
在这里插入图片描述
得加个注解
在这里插入图片描述
在这里插入图片描述

优化2 全局异常的处理机制
作用 在这里插入图片描述

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

@RestControllerAdvice   //作用: 标识我是一个通知方法,并且只拦截Controll层的异常.并且返回JSON.
public class SysResultException {

    //需要定义一个全局的方法 返回指定的报错信息.
    //ExceptionHandler 配置异常的类型,当遇到了某种异常时在执行该方法.
    @ExceptionHandler(RuntimeException.class)
    public Object exception(Exception e){
        e.printStackTrace();    //日志记录/控制台输出. 让程序员知道哪里报错!!!
        return SysResult.fail();
    }
}

再试试事务 验证
在这里插入图片描述
可以实现了

自我实现
先前效果 不加全局异常处理得化 及时impl业务逻辑语句报错 也会把数据插入到数据库
现在
在这里插入图片描述
在这里插入图片描述
提交

在这里插入图片描述
运行时报错 直接保证了事务的一致性
现在去查看数据库
在这里插入图片描述
无新增数据 还可以做回滚之类的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值