数据库的自动填充

数据库的自动填充

1. 数据的自动填充

1.1 业务需求说明

需求: 数据库中每张表里 都包含创建时间/修改时间的字段. 如果每次操作表,都手动的去维护时间信息.则响应开发效率. 能否优化策略.

解决策略: MybatisPlus 实现自动填充功能.

1.2 MPAPI说明

1.2.1 语法规则

  1. 实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler

  2. 注解填充字段 @TableField(… fill = FieldFill.INSERT) 生成器策略部分也可以配置!

1.2.2 添加注解

说明: 新增操作 需要自动填充 created/updated.
修改操作 需要自动填充 updated
在这里插入图片描述

1.2.3 编辑配置类

编辑完成之后,测试代码自动填充是否正常

@Component  //将对象交给Spring容器管理
public class MyMetaObjectHandler implements MetaObjectHandler {
<span class="token comment">//当数据库做新增操作时,自动调用  API调用 不需要问为什么</span>
<span class="token comment">//metaObject对象 是MP自动填充的配置 有默认行为</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">insertFill</span><span class="token punctuation">(</span><span class="token class-name">MetaObject</span> metaObject<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token comment">//获取当前时间</span>
    <span class="token class-name">Date</span> date <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setFieldValByName</span><span class="token punctuation">(</span><span class="token string">"created"</span><span class="token punctuation">,</span> date<span class="token punctuation">,</span> metaObject<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setFieldValByName</span><span class="token punctuation">(</span><span class="token string">"updated"</span><span class="token punctuation">,</span> date<span class="token punctuation">,</span> metaObject<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">//当数据库做修改操作时,自动调用</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">updateFill</span><span class="token punctuation">(</span><span class="token class-name">MetaObject</span> metaObject<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token comment">//获取当前时间</span>
    <span class="token class-name">Date</span> date <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setFieldValByName</span><span class="token punctuation">(</span><span class="token string">"updated"</span><span class="token punctuation">,</span> date<span class="token punctuation">,</span> metaObject<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

2. 作业说明

2.1 用户修改–数据回显

2.1.1 页面URL说明

	//1. 点击修改的按钮
	 <template slot-scope="scope">
                <el-button type="primary" icon="el-icon-edit" size="small" @click="updateUserBtn(scope.row)"></el-button>
                <el-button type="danger" icon="el-icon-delete" size="small" @click="deleteUser(scope.row)"></el-button>
      </template>
<span class="token comment">//2. 按钮事件</span>
 async <span class="token function">updateUserBtn</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>updateDialogVisible <span class="token operator">=</span> <span class="token boolean">true</span>
    <span class="token keyword">const</span> <span class="token punctuation">{<!-- --></span>data<span class="token operator">:</span> result<span class="token punctuation">}</span> <span class="token operator">=</span> await <span class="token keyword">this</span><span class="token punctuation">.</span>$http<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"/user/"</span><span class="token operator">+</span>user<span class="token punctuation">.</span>id<span class="token punctuation">)</span>
    <span class="token keyword">if</span><span class="token punctuation">(</span>result<span class="token punctuation">.</span>status <span class="token operator">!=</span><span class="token operator">=</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"用户查询失败"</span><span class="token punctuation">)</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>updateUserModel <span class="token operator">=</span> result<span class="token punctuation">.</span>data
  <span class="token punctuation">}</span><span class="token punctuation">,</span>

2.1.2 查询用户的业务接口

  • 请求路径: /user/{id}
  • 请求类型: GET
  • 返回值: SysResult对象
参数名称参数说明备注
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据返回user对象
  • JSON格式如下:
{
 "status":200,
 "msg":"服务器调用成功!",
 "data":{
	 "created":"2021-02-18T11:17:23.000+00:00",
	 "updated":"2021-05-17T11:33:46.000+00:00",
	 "id":1,
	 "username":"admin",
	 "password":"a66abb5684c45962d887564f08346e8d",
	 "phone":"13111112222",
	 "email":"1235678@qq.com",
	 "status":true,
	 "role":null
	 }
 }

2.1.3 编辑UserController

需求: 根据ID查询User信息

在这里插入图片描述

2.1.4 编辑UserServiceImpl

在这里插入图片描述

2.1.5 数据回显

在这里插入图片描述

2.2 用户修改–数据更新操作

2.2.1 页面分析

	//1.修改的JS
 	<span slot="footer" class="dialog-footer">
        <el-button @click="updateDialogVisible = false" >取 消</el-button>
        <el-button type="primary" @click="updateUser">确 定</el-button>
      </span>

2.2.2 业务接口文档说明

  • 请求路径: /user/updateUser
  • 请求类型: PUT
  • 请求参数: User对象结构
参数名称参数说明备注
ID用户ID号不能为null
phone手机信息不能为null
email邮箱地址不能为null
  • 返回值: SysResult对象
参数名称参数说明备注
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据null
  • JSON格式如下:
{
 "status":200,
 "msg":"服务器调用成功!",
 "data":{}
 }

在这里插入图片描述

2.2.3 编辑UserServiceImpl

在这里插入图片描述

2.3 用户删除

2.3.1 页面JS分析

 //1.页面删除按钮
 <template slot-scope="scope">
                <el-button type="primary" icon="el-icon-edit" size="small" @click="updateUserBtn(scope.row)"></el-button>
                <el-button type="danger" icon="el-icon-delete" size="small" @click="deleteUser(scope.row)"></el-button>
             </template>

//2.发起ajax请求
async deleteUser(user){
//1.消息确认框
const result = await this.$confirm(‘此操作将永久删除 ‘+user.username+’, 是否继续?’, ‘提示’, {
confirmButtonText: ‘确定’,
cancelButtonText: ‘取消’,
type: ‘warning’
}).catch(error => error)

     <span class="token comment">//如果确认  confirm  如果取消 cancel</span>
     <span class="token keyword">if</span><span class="token punctuation">(</span>result <span class="token operator">!=</span><span class="token operator">=</span> <span class="token string">'confirm'</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"删除取消"</span><span class="token punctuation">)</span>
     <span class="token punctuation">}</span>
     <span class="token keyword">const</span> <span class="token punctuation">{<!-- --></span>data<span class="token operator">:</span> result2<span class="token punctuation">}</span> <span class="token operator">=</span> await <span class="token keyword">this</span><span class="token punctuation">.</span>$http<span class="token punctuation">.</span><span class="token function">delete</span><span class="token punctuation">(</span>`<span class="token operator">/</span>user<span class="token operator">/</span>$<span class="token punctuation">{<!-- --></span>user<span class="token punctuation">.</span>id<span class="token punctuation">}</span>`<span class="token punctuation">)</span>
     <span class="token keyword">if</span><span class="token punctuation">(</span>result2<span class="token punctuation">.</span>status <span class="token operator">!=</span><span class="token operator">=</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"删除失败"</span><span class="token punctuation">)</span>
     <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">success</span><span class="token punctuation">(</span><span class="token string">"删除成功"</span><span class="token punctuation">)</span>
     <span class="token comment">//重新加载 数据</span>
     <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">getUserList</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>

2.3.2 业务接口文档

  • 请求路径: /user/{id}
  • 请求类型: delete
  • 请求参数:
参数名称参数说明备注
ID用户ID号不能为null
  • 返回值: SysResult对象
参数名称参数说明备注
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据null

2.3.3 编辑UserController

需求: 根据用户ID删除数据.
在这里插入图片描述

2.3.4 编辑UserServiceImpl

在这里插入图片描述

3. 关于事务说明

3.1 什么是事务

说明: 如果后台服务器执行正常,则业务正确,事务提交. 如果业务执行失败.事务应该回滚.

3.2 现有代码的业务测试

说明: 如图如果程序执行过程中有报错信息.应该实现事务的回滚. 但是发现现有代码有2个问题
1: 没有添加事物.
2. 后台服务器报错之后,用户没有提示.
在这里插入图片描述

3.3 添加事物-@Transactional注解

在这里插入图片描述

3.4 全局异常的处理机制

3.4.1 常规操作

说明: 一般控制异常信息. 通常情况下需要添加try-catch 用法.
弊端: 所有的方法都需要try-catch的控制. 必然导致代码的结构复杂.
解决方案: Spring内部提供了一种规则 全局异常的处理机制.
在这里插入图片描述

3.4.2 全局异常处理机制

package com.jt.advice;

import com.jt.vo.SysResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**

  • Spring为了整合全局异常的处理 开发了如下的注解

  • 1.@RestControllerAdvice //定义全局异常的处理类 返回值JSON串

  • 2.@ExceptionHandler 标识拦截的异常的类型,如果类型匹配,则执行方法
    */
    @RestControllerAdvice
    public class MyExceptionAdvice {

    //写法:1.运行时异常(通用) 2.自定义异常信息 3.拦截所有异常Exception.class
    @ExceptionHandler(RuntimeException.class)
    public Object exception(Exception e){
    e.printStackTrace(); //输出异常信息
    //需求: 如果遇到异常,应该提示用户201/失败信息.
    return SysResult.fail();
    }
    }

4. 商品分类业务实现

4.1 实现商品分类页面跳转

编辑路由,实现商品分类操作

import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '../components/Login.vue'
import ElementUI from '../components/ElementUI.vue'
import Home from '../components/Home.vue'
import User from '../components/user/user.vue'
import Item from '../components/items/Item.vue'
import Welcome from '../components/Welcome.vue'
import ItemCat from '../components/items/ItemCat.vue'

//使用路由机制 通过children实现路由嵌套, redirect重定向
Vue.use(VueRouter)
const routes = [
{ path: ‘/’, redirect: ‘/login’},
{ path: ‘/login’, component: Login},
{ path: ‘/elementUI’, component: ElementUI},
//children组件的跳转 在home组件内部进行填充
{ path: ‘/home’, component: Home, redirect: ‘/welcome’, children:[
{ path: ‘/welcome’, component: Welcome},
{ path: ‘/user’, component: User},
{ path: ‘/item’, component: Item},
{ path: ‘/itemCat’, component: ItemCat}
]}
]

//配置路由对象
const router = new VueRouter({
routes
})

/* 配置路由导航守卫 控制权限
1.to 要跳转的网址
2.from 请求从哪里来
3.next 回调函数 放行/跳转
*/

router.beforeEach((to,from,next) => {
//1.如果用户访问 /login 请求应该放行 终止程序
if(to.path === ‘/login’) {
return next()
}

//2.如果用户访问不是login 则需要校验是否登录 检查是否有token
let token = window.sessionStorage.getItem(‘token’)
if(token !== null && token.length > 0){
return next()
}else {
//没有token 应该跳转到登录页面 “/login”
return next(“/login”)
}

//if(token) if的一种简化写法 解析: 如果token不为null
//if(!token) 解析: token为null
})

export default router

在这里插入图片描述

4.2 ItemCat 说明

4.2.1 表设计说明

在这里插入图片描述

4.2.2 ItemCat POJO说明

在这里插入图片描述

4.2.3 商品分类业务说明

  1. 京东官网商品分类介绍
    在这里插入图片描述
    2.如何维护父子关系
    表: id与parent_id
    对象: this–children

  2. 三级菜单说明–Sql查询
    在这里插入图片描述

  3. 如何利用对象封装3级菜单结构?
    一级菜单
    children-----> 二级菜单信息
    children-------> 三级菜单信息
    在这里插入图片描述

4.3 商品分类列表实现

4.3.1 业务需求

当用户点击商品分类列表时,应该采用三级商品分类的结构实现列表的展现.

4.3.2 页面JS说明

	//1. 生命周期函数说明
	created() {
      //默认获取商品分类列表数据
      this.findItemCatList()
    },
<span class="token comment">//2.业务方法说明</span>
  async <span class="token function">findItemCatList</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">const</span> <span class="token punctuation">{<!-- --></span> data<span class="token operator">:</span> result <span class="token punctuation">}</span>
      <span class="token operator">=</span> await <span class="token keyword">this</span><span class="token punctuation">.</span>$http<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"/itemCat/findItemCatList/3"</span><span class="token punctuation">)</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>result<span class="token punctuation">.</span>status <span class="token operator">!=</span><span class="token operator">=</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"获取商品分类列表失败!!"</span><span class="token punctuation">)</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>itemCatList <span class="token operator">=</span> result<span class="token punctuation">.</span>data
  <span class="token punctuation">}</span><span class="token punctuation">,</span>

4.3.3 业务接口文档说明

  • 请求路径: /itemCat/findItemCatList/{level}
  • 请求类型: get
  • 请求参数: level
参数名称参数说明备注
level查询级别1查询一级分类 2查询1-2 级商品分类 3查询1-2-3级商品分类
  • 业务说明: 查询3级分类菜单数据 要求三层结构嵌套
  • 返回值: SysResult对象
参数名称参数说明备注
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据3级商品分类信息

4.3.3 编辑ItemCatController

package com.jt.controller;

import com.jt.pojo.ItemCat;
import com.jt.service.ItemCatService;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@CrossOrigin
@RequestMapping(“/itemCat”)
public class ItemCatController {

<span class="token annotation punctuation">@Autowired</span>
<span class="token keyword">private</span> <span class="token class-name">ItemCatService</span> itemCatService<span class="token punctuation">;</span>

<span class="token comment">/**
 * 需求: 查询3级商品分类列表信息
 * URL:  /itemCat/findItemCatList/{level}
 * 参数:  level 查询的层级
 * 返回值: SysResult对象(List&lt;ItemCat&gt;)
 */</span>
<span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/findItemCatList/{level}"</span><span class="token punctuation">)</span>
<span class="token keyword">public</span> <span class="token class-name">SysResult</span> <span class="token function">findItemCatList</span><span class="token punctuation">(</span><span class="token annotation punctuation">@PathVariable</span> <span class="token class-name">Integer</span> level<span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>

    <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ItemCat</span><span class="token punctuation">&gt;</span></span> itemCatList <span class="token operator">=</span> itemCatService<span class="token punctuation">.</span><span class="token function">findItemCatList</span><span class="token punctuation">(</span>level<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token class-name">SysResult</span><span class="token punctuation">.</span><span class="token function">success</span><span class="token punctuation">(</span>itemCatList<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

4.3.4 编辑ItemCatService

package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ItemCatServiceImpl implements ItemCatService{

<span class="token annotation punctuation">@Autowired</span>
<span class="token keyword">private</span> <span class="token class-name">ItemCatMapper</span> itemCatMapper<span class="token punctuation">;</span>

<span class="token comment">/**
 * 业务: 查询3级商品分类信息
 *      1. 一级中嵌套二级集合
 *      2. 二级菜单嵌套三级集合.
 *
 * 1.0版本: for循环嵌套结构  暂时不考虑level 最好理解的
 * 常识:
 *      1.用户第一次查询数据库 需要建立链接.
 *      2.第二次查询 从链接池中动态获取链接 所以速度更快!!!
 *
 *  思考: 该业务查询了多少次数据库??? 第一层循环10个  第二层循环10 总查询数=10*10=100次
 *       如何优化查询策略!!!!
 * @param level
 * @return
 */</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ItemCat</span><span class="token punctuation">&gt;</span></span> <span class="token function">findItemCatList</span><span class="token punctuation">(</span><span class="token class-name">Integer</span> level<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token comment">//性能问题:!!!!!</span>
    <span class="token keyword">long</span> startTime <span class="token operator">=</span> <span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">currentTimeMillis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//1.查询一级商品分类信息</span>
    <span class="token class-name">QueryWrapper</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ItemCat</span><span class="token punctuation">&gt;</span></span> queryWrapper <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">QueryWrapper</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    queryWrapper<span class="token punctuation">.</span><span class="token function">eq</span><span class="token punctuation">(</span><span class="token string">"parent_id"</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ItemCat</span><span class="token punctuation">&gt;</span></span> oneList <span class="token operator">=</span> itemCatMapper<span class="token punctuation">.</span><span class="token function">selectList</span><span class="token punctuation">(</span>queryWrapper<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//2.查询二级商品分类信息  遍历一级集合</span>
    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token class-name">ItemCat</span> oneItemCat <span class="token operator">:</span> oneList<span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
        queryWrapper<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>   <span class="token comment">//清空条件</span>
        queryWrapper<span class="token punctuation">.</span><span class="token function">eq</span><span class="token punctuation">(</span><span class="token string">"parent_id"</span><span class="token punctuation">,</span> oneItemCat<span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ItemCat</span><span class="token punctuation">&gt;</span></span> twoList <span class="token operator">=</span> itemCatMapper<span class="token punctuation">.</span><span class="token function">selectList</span><span class="token punctuation">(</span>queryWrapper<span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">//3.查询三级商品分类信息  遍历</span>
        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token class-name">ItemCat</span> twoItemCat <span class="token operator">:</span> twoList<span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
            queryWrapper<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            queryWrapper<span class="token punctuation">.</span><span class="token function">eq</span><span class="token punctuation">(</span><span class="token string">"parent_id"</span><span class="token punctuation">,</span> twoItemCat<span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ItemCat</span><span class="token punctuation">&gt;</span></span> threeList <span class="token operator">=</span> itemCatMapper<span class="token punctuation">.</span><span class="token function">selectList</span><span class="token punctuation">(</span>queryWrapper<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token comment">//将三级封装给二级</span>
            twoItemCat<span class="token punctuation">.</span><span class="token function">setChildren</span><span class="token punctuation">(</span>threeList<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token comment">//3.将二级记录封装给一级</span>
        oneItemCat<span class="token punctuation">.</span><span class="token function">setChildren</span><span class="token punctuation">(</span>twoList<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token comment">//记录程序的结束时间</span>
    <span class="token keyword">long</span> endTime <span class="token operator">=</span> <span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">currentTimeMillis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"查询耗时:"</span><span class="token operator">+</span><span class="token punctuation">(</span>endTime <span class="token operator">-</span> startTime<span class="token punctuation">)</span><span class="token operator">+</span><span class="token string">"毫秒"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> oneList<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

4.3.5 页面效果展现

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值