当前位置: 首页 > news >正文

用服务器建立网站怎么制作网站程序

用服务器建立网站,怎么制作网站程序,京东seo搜索优化,东莞搜索seo优化排名目录 一、准备工作 1.1 需求 1.2 环境搭建 1.2.1 准备数据库表 1.2.2 创建springboot工程 1.2.3 配置application.properties 准备对应实体类 1.2.3.1 application.properties 1.2.3.2 实体类 1.2.3.2.1 Emp类 1.2.3.2.2 Dept类 1.2.4 准备对应的Mapper、…目录 一、准备工作 1.1 需求 1.2 环境搭建 1.2.1 准备数据库表  1.2.2 创建springboot工程 1.2.3 配置application.properties 准备对应实体类  1.2.3.1 application.properties 1.2.3.2 实体类 1.2.3.2.1 Emp类 1.2.3.2.2 Dept类 1.2.4 准备对应的Mapper、Service接口实现类、Controller基础结构 1.2.4.1 Mapper 1.2.4.1.1 DeptMapper接口 1.2.4.1.2 EmpMapper接口 1.2.4.2 Service接口实现类 1.2.4.2.1 DeptService接口 1.2.4.2.2 EmpService接口 1.2.4.2.1 DeptServiceImpl实现类 1.2.4.2.2 EmpServiceImpl实现类 1.2.4.3 Controller基础结构 1.2.4.3.1 Deptcontroller 1.2.4.3.2 EmpController 1.2.5 pom.xml 1.2.6 完成效果 1.3 开发规范 ​编辑 1.3.1 接口文档 1.3.1.1  部门管理 1.3.1.1.1 部门列表查询 1.3.1.1.1.1 基本信息 1.3.1.1.1.2 请求参数 1.3.1.1.1.3 响应数据 1.3.1.1.2 删除部门 1.3.1.1.2.1 基本信息 1.3.1.1.2.2 请求参数 1.3.1.1.2.3 响应数据 1.3.1.1.3 添加部门 1.3.1.1.3 1 基本信息 1.3.1.1.3 .2 请求参数 1.3.1.1.3 .3 响应数据 1.3.1.1.4 根据ID查询 1.3.1.1.4.1 基本信息 1.3.1.1.4..2 请求参数 1.3.1.1.4.3 响应数据 1.3.1.1.5 修改部门 1.3.1.1.5.1 基本信息 1.3.1.1.5.2 请求参数 1.3.1.1.5.3 响应数据 1.3.1.2 员工管理 1.3.1.2.1 员工列表查询 1.3.1.2.1.1 基本信息 1.3.1.2.1.2 请求参数 1.3.1.2.1.3 响应数据 1.3.1.2.2 删除员工 1.3.1.2.2.1 基本信息 1.3.1.2.2.2 请求参数 1.3.1.2.2.3 响应数据 1.3.1.2.3 添加员工 1.3.1.2.3.1 基本信息 1.3.1.2.3.2 请求参数 1.3.1.2.3.3 响应数据 1.3.1.2.4 根据ID查询 1.3.1.2.4.1 基本信息 1.3.1.2.4.2 请求参数 1.3.1.2.4.3 响应数据 1.3.1.2.5 修改员工 1.3.1.2.5.1 基本信息 1.3.1.2.5.2 请求参数 1.3.1.2.5.3 响应数据 1.3.1.2.6 文件上传 1.3.1.2.6.1 基本信息 1.3.1.2.6.2 请求参数 1.3.1.2.6.3 响应数据 1.3.1.3. 其他接口 1.3.1.3.1 登录 1.3.1.3.1.1 基本信息 1.3.1.3.1.2 请求参数 1.3.1.3.1.3 响应数据 1.3.1.3.1.4 备注说明 1.3.2 Resful风格 1.3.3 统一响应结果 1.3.4 思路 二、部门管理 2.1 查询部门 2.1.1 思路 2.1.2 DeptController 2.1.3 DeptService  2.1.4 DeptServiceImpl 2.1.5 DeptMapper  2.1.6 启动服务测试  2.1.7 前后端联调 2.1.8 总结 2.2 删除部门 2.2.1 思路  2.2.2  DeptController 2.2.3 DeptService  2.2.4 DeptServiceImpl 2.2.5 DeptMapper  2.1.6 启动服务 测试 2.2.7 前后端联调 2.3 新增部门 2.3.1 思路 2.3.2  DeptController 2.3.3 DeptService  2.3.4 DeptServiceImpl 2.3.5 DeptMapper  2.3.6 启动服务-测试  2.3.7 前后端联调  2.4 优化DeptController的路径 2.5 根据id查询部门  2.5.1 DeptController 2.5.2 DeptService  2.5.3 DeptServiceImpl 2.5.4 DeptMapper  2.5.5 启动服务-测试 2.5.6 前后端联调 2.6 修改部门  2.6.1 DeptController 2.6.2 DeptService  2.6.3 DeptServiceImpl 2.6.4 DeptMapper  2.6.5 启动服务-测试 2.6.6 前后端联调 三、员工管理 3.1 分页查询 3.1.1 思路 3.1.2 PageBean分页查询结果实体类 3.1.3 EmpController 3.1.4 EmpService 3.1.5 EmpServiceImpl 3.1.6 EmpMapper 3.1.7 启动服务-测试 3.1.8 前后端联调 3.1.9 总结 3.1.10 使用分页插件 PageHelper优化代码 3.1.10.1 引入 PageHelper依赖 3.1.10.2 EmpMapper 3.1.10.3 EmpServiceImpl 3.1.10.4 启动服务-测试 3.1.10.5 前后端联调 3.1.10.6 总结 3.2 分页查询带条件  3.2.1 思路  3.2.2 EmpController 3.2.3 EmpService 3.2.4 EmpServiceImpl 3.2.5 EmpMapper 3.2.6 EmpMapper.xml 3.2.7 启动服务-测试 3.2.8 前后端联调 3.2.9 总结 ​编辑 3.3 删除员工  3.3.1 思路 3.3.2 EmpController 3.3.3 EmpService 3.3.4 EmpServiceImpl 3.3.5 EmpMapper.xml 3.3.6 EmpMapper 3.3.7 启动服务-测试 3.3.8 前后端联调 3.4 新增员工  3.4.1 思路 3.4.2 EmpController 3.4.3 EmpService 3.4.4 EmpServiceImpl 3.4.5 EmpMapper 3.4.6 启动服务-测试 3.4.7 前后端联调 3.5 文件上传  3.5.1 简介 3.5.1.1 upload.html 3.5.1.2 UploadController 3.5.1.3 启动服务-测试 3.5.1.4 总结 3.5.2 本地存储 3.5.2.1 UploadController 3.5.2.2 启动服务-测试  3.5.2.3 优化确保存储文件名唯一UUIDUploadController 3.5.2.4 优化配置文件上传大小application.properties 3.5.2.5 扩展 3.5.3 阿里云OSS 3.5.3.1 通用思路  3.5.3.2 阿里云OSS准备工作 3.5.3.3 安装依赖 3.5.3.4 示例代码 3.6 新增页面集成文件上传阿里云OOS 3.6.1 思路 3.6.2  引人阿里云上传OSS上传文件工具类 3.6.3 UploadController 3.6.4 启动服务-测试 3.6.5 前后端联调 3.6.6 总结 3.7 修改员工 3.7.1 思路 3.7.2 查询回显  3.7.2.1 思路 3.7.2.2 EmpController 3.7.2.3 EmpService 3.7.2.4 EmpServiceImpl 3.7.2.5 EmpMapper 3.7.2.6 启动服务-测试 3.7.2.7 前后端联调 3.7.3 修改员工 3.7.3.1 思路 3.7.3.2 EmpController 3.7.3.3 EmpService 3.7.3.4 EmpServiceImpl 3.7.3.5  EmpMapper 3.7.3.6 EmpMapper.xml 3.7.3.7 启动服务-测试 3.7.3.8 前后端联调 前言学习了前面知识开始后端开发的实战教程参照之前的原型进行设计、编码 一、准备工作 1.1 需求 1.2 环境搭建 1.2.1 准备数据库表  -- 部门管理 create table dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null comment 创建时间,update_time datetime not null comment 修改时间 ) comment 部门表;insert into dept (id, name, create_time, update_time) values(1,学工部,now(),now()),(2,教研部,now(),now()),(3,咨询部,now(),now()), (4,就业部,now(),now()),(5,人事部,now(),now());-- 员工管理(带约束) create table emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用户名,password varchar(32) default 123456 comment 密码,name varchar(10) not null comment 姓名,gender tinyint unsigned not null comment 性别, 说明: 1 男, 2 女,image varchar(300) comment 图像,job tinyint unsigned comment 职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师,entrydate date comment 入职时间,dept_id int unsigned comment 部门ID,create_time datetime not null comment 创建时间,update_time datetime not null comment 修改时间 ) comment 员工表;INSERT INTO emp(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES(1,jinyong,123456,金庸,1,1.jpg,4,2000-01-01,2,now(),now()),(2,zhangwuji,123456,张无忌,1,2.jpg,2,2015-01-01,2,now(),now()),(3,yangxiao,123456,杨逍,1,3.jpg,2,2008-05-01,2,now(),now()),(4,weiyixiao,123456,韦一笑,1,4.jpg,2,2007-01-01,2,now(),now()),(5,changyuchun,123456,常遇春,1,5.jpg,2,2012-12-05,2,now(),now()),(6,xiaozhao,123456,小昭,2,6.jpg,3,2013-09-05,1,now(),now()),(7,jixiaofu,123456,纪晓芙,2,7.jpg,1,2005-08-01,1,now(),now()),(8,zhouzhiruo,123456,周芷若,2,8.jpg,1,2014-11-09,1,now(),now()),(9,dingminjun,123456,丁敏君,2,9.jpg,1,2011-03-11,1,now(),now()),(10,zhaomin,123456,赵敏,2,10.jpg,1,2013-09-05,1,now(),now()),(11,luzhangke,123456,鹿杖客,1,11.jpg,5,2007-02-01,3,now(),now()),(12,hebiweng,123456,鹤笔翁,1,12.jpg,5,2008-08-18,3,now(),now()),(13,fangdongbai,123456,方东白,1,13.jpg,5,2012-11-01,3,now(),now()),(14,zhangsanfeng,123456,张三丰,1,14.jpg,2,2002-08-01,2,now(),now()),(15,yulianzhou,123456,俞莲舟,1,15.jpg,2,2011-05-01,2,now(),now()),(16,songyuanqiao,123456,宋远桥,1,16.jpg,2,2007-01-01,2,now(),now()),(17,chenyouliang,123456,陈友谅,1,17.jpg,NULL,2015-03-21,NULL,now(),now()); 1.2.2 创建springboot工程 1.2.3 配置application.properties 准备对应实体类  1.2.3.1 application.properties #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://localhost:3306/tlias #连接数据库的用户名 spring.datasource.usernameroot #连接数据库的密码 spring.datasource.password1234#配置mybatis的日志, 指定输出到控制台 mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl#开启mybatis的驼峰命名自动映射开关 a_column ------ aCloumn mybatis.configuration.map-underscore-to-camel-casetrue1.2.3.2 实体类 1.2.3.2.1 Emp类 package com.runa.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDate; import java.time.LocalDateTime;/*** 员工实体类*/ Data NoArgsConstructor AllArgsConstructor public class Emp {private Integer id; //IDprivate String username; //用户名private String password; //密码private String name; //姓名private Short gender; //性别 , 1 男, 2 女private String image; //图像urlprivate Short job; //职位 , 1 班主任 , 2 讲师 , 3 学工主管 , 4 教研主管 , 5 咨询师private LocalDate entrydate; //入职日期private Integer deptId; //部门IDprivate LocalDateTime createTime; //创建时间private LocalDateTime updateTime; //修改时间 }1.2.3.2.2 Dept类 package com.runa.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime;/*** 部门实体类*/ Data NoArgsConstructor AllArgsConstructor public class Dept {private Integer id; //IDprivate String name; //部门名称private LocalDateTime createTime; //创建时间private LocalDateTime updateTime; //修改时间 }1.2.4 准备对应的Mapper、Service接口实现类、Controller基础结构 1.2.4.1 Mapper 1.2.4.1.1 DeptMapper接口 package com.runa.mapper;import org.apache.ibatis.annotations.Mapper;/*** 部门管理*/ Mapper public interface DeptMapper { }1.2.4.1.2 EmpMapper接口 package com.runa.mapper;import org.apache.ibatis.annotations.Mapper;/*** 员工管理*/ Mapper public interface EmpMapper { }1.2.4.2 Service接口实现类 1.2.4.2.1 DeptService接口 package com.runa.service;public interface DeptService { }1.2.4.2.2 EmpService接口 package com.runa.service;public interface EmpService { }1.2.4.2.1 DeptServiceImpl实现类 package com.runa.service.impl;import com.runa.service.DeptService; import org.springframework.stereotype.Service;Service public class DeptServiceImpl implements DeptService { }1.2.4.2.2 EmpServiceImpl实现类 package com.runa.service.impl;import com.runa.service.EmpService; import org.springframework.stereotype.Service;Service public class EmpServiceImpl implements EmpService { }1.2.4.3 Controller基础结构 1.2.4.3.1 Deptcontroller package com.runa.controller;import org.springframework.web.bind.annotation.RestController;/*** 部门管理Controller*/ RestController public class Deptcontroller { }1.2.4.3.2 EmpController package com.runa.controller;import org.springframework.web.bind.annotation.RestController;/*** 员工管理Controller*/ RestController public class EmpController { }1.2.5 pom.xml ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.1.2/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.runa/groupIdartifactIdspring-boot-project-test/artifactIdversion0.0.1-SNAPSHOT/versionnamespring-boot-project-test/namedescriptionspring-boot-project-test/descriptionpropertiesjava.version17/java.version/propertiesdependencies!-- web 起步依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- mybatis起步依赖 --dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion3.0.2/version/dependency!-- mysql驱动 --dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency!-- lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!-- springboot 单元测试 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter-test/artifactIdversion3.0.2/versionscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project1.2.6 完成效果 1.3 开发规范 1.3.1 接口文档 tlias智能学习辅助系统接口文档-V1.0 1.3.1.1  部门管理 1.3.1.1.1 部门列表查询 1.3.1.1.1.1 基本信息 请求路径/depts 请求方式GET 接口描述该接口用于部门列表数据查询 1.3.1.1.1.2 请求参数 无 1.3.1.1.1.3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject[ ]非必须返回的数据|- idnumber非必须id|- namestring非必须部门名称|- createTimestring非必须创建时间|- updateTimestring非必须修改时间 响应数据样例 {code: 1,msg: success,data: [{id: 1,name: 学工部,createTime: 2022-09-01T23:06:29,updateTime: 2022-09-01T23:06:29},{id: 2,name: 教研部,createTime: 2022-09-01T23:06:29,updateTime: 2022-09-01T23:06:29}] } 1.3.1.1.2 删除部门 1.3.1.1.2.1 基本信息 请求路径/depts/{id} 请求方式DELETE 接口描述该接口用于根据ID删除部门数据 1.3.1.1.2.2 请求参数 参数格式路径参数 参数说明 参数名类型是否必须备注idnumber必须部门ID 请求参数样例 /depts/1 1.3.1.1.2.3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject非必须返回的数据 响应数据样例 {code:1,msg:success,data:null } 1.3.1.1.3 添加部门 1.3.1.1.3 1 基本信息 请求路径/depts 请求方式POST 接口描述该接口用于添加部门数据 1.3.1.1.3 .2 请求参数 格式application/json 参数说明 参数名类型是否必须备注namestring必须部门名称 请求参数样例 {name: 教研部 } 1.3.1.1.3 .3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject非必须返回的数据 响应数据样例 {code:1,msg:success,data:null } 1.3.1.1.4 根据ID查询 1.3.1.1.4.1 基本信息 请求路径/depts/{id} 请求方式GET 接口描述该接口用于根据ID查询部门数据 1.3.1.1.4..2 请求参数 参数格式路径参数 参数说明 参数名类型是否必须备注idnumber必须部门ID 请求参数样例 /depts/1 1.3.1.1.4.3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject非必须返回的数据|- idnumber非必须id|- namestring非必须部门名称|- createTimestring非必须创建时间|- updateTimestring非必须修改时间 响应数据样例 {code: 1,msg: success,data: {id: 1,name: 学工部,createTime: 2022-09-01T23:06:29,updateTime: 2022-09-01T23:06:29} } 1.3.1.1.5 修改部门 1.3.1.1.5.1 基本信息 请求路径/depts 请求方式PUT 接口描述该接口用于修改部门数据 1.3.1.1.5.2 请求参数 格式application/json 参数说明 参数名类型是否必须备注idnumber必须部门IDnamestring必须部门名称 请求参数样例 {id: 1,name: 教研部 } 1.3.1.1.5.3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject非必须返回的数据 响应数据样例 {code:1,msg:success,data:null } 1.3.1.2 员工管理 1.3.1.2.1 员工列表查询 1.3.1.2.1.1 基本信息 请求路径/emps 请求方式GET 接口描述该接口用于员工列表数据的条件分页查询 1.3.1.2.1.2 请求参数 参数格式queryString 参数说明 参数名称是否必须示例备注name否张姓名gender否1性别 , 1 男 , 2 女begin否2010-01-01范围匹配的开始时间(入职日期)end否2020-01-01范围匹配的结束时间(入职日期)page是1分页查询的页码如果未指定默认为1pageSize是10分页查询的每页记录数如果未指定默认为10 请求数据样例 /emps?name张gender1begin2007-09-01end2022-09-01page1pageSize10 1.3.1.2.1.3 响应数据 参数格式application/json 参数说明 名称类型是否必须默认值备注其他信息codenumber必须响应码, 1 成功 , 0 失败msgstring非必须提示信息dataobject必须返回的数据|- totalnumber必须总记录数|- rowsobject []必须数据列表item 类型: object|- idnumber非必须id|- usernamestring非必须用户名|- namestring非必须姓名|- passwordstring非必须密码|- entrydatestring非必须入职日期|- gendernumber非必须性别 , 1 男 ; 2 女|- imagestring非必须图像|- jobnumber非必须职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师|- deptIdnumber非必须部门id|- createTimestring非必须创建时间|- updateTimestring非必须更新时间 响应数据样例 {code: 1,msg: success,data: {total: 2,rows: [{id: 1,username: jinyong,password: 123456,name: 金庸,gender: 1,image: https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg,job: 2,entrydate: 2015-01-01,deptId: 2,createTime: 2022-09-01T23:06:30,updateTime: 2022-09-02T00:29:04},{id: 2,username: zhangwuji,password: 123456,name: 张无忌,gender: 1,image: https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg,job: 2,entrydate: 2015-01-01,deptId: 2,createTime: 2022-09-01T23:06:30,updateTime: 2022-09-02T00:29:04}]} } 1.3.1.2.2 删除员工 1.3.1.2.2.1 基本信息 请求路径/emps/{ids} 请求方式DELETE 接口描述该接口用于批量删除员工的数据信息 1.3.1.2.2.2 请求参数 参数格式路径参数 参数说明 参数名类型示例是否必须备注ids数组 array1,2,3必须员工的id数组 请求参数样例 /emps/1,2,3 1.3.1.2.2.3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject非必须返回的数据 响应数据样例 {code:1,msg:success,data:null } 1.3.1.2.3 添加员工 1.3.1.2.3.1 基本信息 请求路径/emps 请求方式POST 接口描述该接口用于添加员工的信息 1.3.1.2.3.2 请求参数 参数格式application/json 参数说明 名称类型是否必须备注usernamestring必须用户名namestring必须姓名gendernumber必须性别, 说明: 1 男, 2 女imagestring非必须图像deptIdnumber非必须部门identrydatestring非必须入职日期jobnumber非必须职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师 请求数据样例 {image: https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-03-07-37-38222.jpg,username: linpingzhi,name: 林平之,gender: 1,job: 1,entrydate: 2022-09-18,deptId: 1 } 1.3.1.2.3.3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject非必须返回的数据 响应数据样例 {code:1,msg:success,data:null } 1.3.1.2.4 根据ID查询 1.3.1.2.4.1 基本信息 请求路径/emps/{id} 请求方式GET 接口描述该接口用于根据主键ID查询员工的信息 1.3.1.2.4.2 请求参数 参数格式路径参数 参数说明 参数名类型是否必须备注idnumber必须部门ID 请求参数样例 /emps/1 1.3.1.2.4.3 响应数据 参数格式application/json 参数说明 名称类型是否必须默认值备注其他信息codenumber必须响应码, 1 成功 , 0 失败msgstring非必须提示信息dataobject必须返回的数据|- idnumber非必须id|- usernamestring非必须用户名|- namestring非必须姓名|- passwordstring非必须密码|- entrydatestring非必须入职日期|- gendernumber非必须性别 , 1 男 ; 2 女|- imagestring非必须图像|- jobnumber非必须职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师|- deptIdnumber非必须部门id|- createTimestring非必须创建时间|- updateTimestring非必须更新时间 响应数据样例 {code: 1,msg: success,data: {id: 2,username: zhangwuji,password: 123456,name: 张无忌,gender: 1,image: https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg,job: 2,entrydate: 2015-01-01,deptId: 2,createTime: 2022-09-01T23:06:30,updateTime: 2022-09-02T00:29:04} } 1.3.1.2.5 修改员工 1.3.1.2.5.1 基本信息 请求路径/emps 请求方式PUT 接口描述该接口用于修改员工的数据信息 1.3.1.2.5.2 请求参数 参数格式application/json 参数说明 名称类型是否必须备注idnumber必须idusernamestring必须用户名namestring必须姓名gendernumber必须性别, 说明: 1 男, 2 女imagestring非必须图像deptIdnumber非必须部门identrydatestring非必须入职日期jobnumber非必须职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师 请求数据样例 {id: 1,image: https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-03-07-37-38222.jpg,username: linpingzhi,name: 林平之,gender: 1,job: 1,entrydate: 2022-09-18,deptId: 1 } 1.3.1.2.5.3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject非必须返回的数据 响应数据样例 {code:1,msg:success,data:null } 1.3.1.2.6 文件上传 1.3.1.2.6.1 基本信息 请求路径/upload 请求方式POST 接口描述上传图片接口 1.3.1.2.6.2 请求参数 参数格式multipart/form-data 参数说明 参数名称参数类型是否必须示例备注imagefile是 1.3.1.2.6.3 响应数据 参数格式application/json 参数说明 参数名类型是否必须备注codenumber必须响应码1 代表成功0 代表失败msgstring非必须提示信息dataobject非必须返回的数据上传图片的访问路径 响应数据样例 {code: 1,msg: success,data: https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-0400.jpg } 1.3.1.3. 其他接口 1.3.1.3.1 登录 1.3.1.3.1.1 基本信息 请求路径/login 请求方式POST 接口描述该接口用于员工登录Tlias智能学习辅助系统登录完毕后系统下发JWT令牌。 1.3.1.3.1.2 请求参数 参数格式application/json 参数说明 名称类型是否必须备注usernamestring必须用户名passwordstring必须密码 请求数据样例 {username: jinyong,password: 123456 } 1.3.1.3.1.3 响应数据 参数格式application/json 参数说明 名称类型是否必须默认值备注其他信息codenumber必须响应码, 1 成功 ; 0 失败msgstring非必须提示信息datastring必须返回的数据 , jwt令牌 响应数据样例 {code: 1,msg: success,data: eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoi6YeR5bq4IiwiaWQiOjEsInVzZXJuYW1lIjoiamlueW9uZyIsImV4cCI6MTY2MjIwNzA0OH0.KkUc_CXJZJ8Dd063eImx4H9Ojfrr6XMJ-yVzaWCVZCo } 1.3.1.3.1.4 备注说明 用户登录成功后系统会自动下发JWT令牌然后在后续的每次请求中都需要在请求头header中携带到服务端请求头的名称为 token 值为 登录时下发的JWT令牌。 如果检测到用户未登录则会返回如下固定错误信息 {code: 0,msg: NOT_LOGIN,data: null } 1.3.2 Resful风格 1.3.3 统一响应结果 package com.runa.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructor public class Result {private Integer code;//响应码1 代表成功; 0 代表失败private String msg; //响应信息 描述字符串private Object data; //返回的数据//增删改 成功响应public static Result success(){return new Result(1,success,null);}//查询 成功响应public static Result success(Object data){return new Result(1,success,data);}//失败响应public static Result error(String msg){return new Result(0,msg,null);} }1.3.4 思路 二、部门管理 2.1 查询部门 2.1.1 思路 2.1.2 DeptController package com.runa.controller;import com.runa.pojo.Result; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;/*** 部门管理Controller*/ Slf4j RestController public class Deptcontroller {// private static Logger log LoggerFactory.getLogger(Deptcontroller.class);// RequestMapping(value /depts, method RequestMethod.GET) //指定请求方式为GETGetMapping(/depts) //public Result list(){log.info(查询全部部门数据);return Result.success();} }可以启动服务测试一下 继续优化 package com.runa.controller;import com.runa.pojo.Dept; import com.runa.pojo.Result; import com.runa.service.DeptService; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** 部门管理Controller*/ Slf4j RestController public class Deptcontroller {Autowiredprivate DeptService deptService;// private static Logger log LoggerFactory.getLogger(Deptcontroller.class); // RequestMapping(value /depts, method RequestMethod.GET) //指定请求方式为GETGetMapping(/depts) //public Result list(){log.info(查询全部部门数据);// 调用 service查询部门数据ListDept deptList deptService.list();return Result.success(deptList);} }2.1.3 DeptService  package com.runa.service;import com.runa.pojo.Dept;import java.util.List;public interface DeptService {/*** 查询全部 部门数据* return*/ListDept list(); }2.1.4 DeptServiceImpl package com.runa.service.impl;import com.runa.mapper.DeptMapper; import com.runa.pojo.Dept; import com.runa.service.DeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;Service public class DeptServiceImpl implements DeptService {Autowiredprivate DeptMapper deptMapper;Overridepublic ListDept list() {return deptMapper.list();} }2.1.5 DeptMapper  package com.runa.mapper;import com.runa.pojo.Dept; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.util.List;/*** 部门管理*/ Mapper public interface DeptMapper {/*** 查询全部部门* return*/Select(select * from springbootproject.dept)ListDept list(); }2.1.6 启动服务测试  2.1.7 前后端联调 前端 代码下载 2.1.8 总结 2.2 删除部门 2.2.1 思路  2.2.2  DeptController package com.runa.controller;import com.runa.pojo.Dept; import com.runa.pojo.Result; import com.runa.service.DeptService; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;/*** 部门管理Controller*/ Slf4j RestController public class Deptcontroller {Autowiredprivate DeptService deptService;/*** 查询部门数据* return*/ // private static Logger log LoggerFactory.getLogger(Deptcontroller.class); // RequestMapping(value /depts, method RequestMethod.GET) //指定请求方式为GETGetMapping(/depts) //public Result list(){log.info(查询全部部门数据);// 调用 service查询部门数据ListDept deptList deptService.list();return Result.success(deptList);}/*** 删除部门* return*/DeleteMapping(/depts/{id})public Result delete(PathVariable Integer id){log.info(根据id删除部门{}, id);// 调用service删除部门deptService.delete(id);return Result.success();} }2.2.3 DeptService  package com.runa.service;import com.runa.pojo.Dept;import java.util.List;public interface DeptService {/*** 查询全部 部门数据* return*/ListDept list();/*** 依据id删除部门* param id*/void delete(Integer id); }2.2.4 DeptServiceImpl package com.runa.service.impl;import com.runa.mapper.DeptMapper; import com.runa.pojo.Dept; import com.runa.service.DeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;Service public class DeptServiceImpl implements DeptService {Autowiredprivate DeptMapper deptMapper;/*** 查询部门* return*/Overridepublic ListDept list() {return deptMapper.list();}/*** 根据ID删除部门* param id*/Overridepublic void delete(Integer id) {deptMapper.deleteById(id);} }2.2.5 DeptMapper  package com.runa.mapper;import com.runa.pojo.Dept; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.util.List;/*** 部门管理*/ Mapper public interface DeptMapper {/*** 查询全部部门* return*/Select(select * from springbootproject.dept)ListDept list();/*** 根据id删除部门*/Delete(delete from dept where id #{id})void deleteById(Integer id); }2.1.6 启动服务 测试 2.2.7 前后端联调 2.3 新增部门 2.3.1 思路 2.3.2  DeptController package com.runa.controller;import com.runa.pojo.Dept; import com.runa.pojo.Result; import com.runa.service.DeptService; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;/*** 部门管理Controller*/ Slf4j RestController public class Deptcontroller {Autowiredprivate DeptService deptService;/*** 查询部门数据* return*/ // private static Logger log LoggerFactory.getLogger(Deptcontroller.class); // RequestMapping(value /depts, method RequestMethod.GET) //指定请求方式为GETGetMapping(/depts) //public Result list(){log.info(查询全部部门数据);// 调用 service查询部门数据ListDept deptList deptService.list();return Result.success(deptList);}/*** 删除部门* return*/DeleteMapping(/depts/{id})public Result delete(PathVariable Integer id){log.info(根据id删除部门{}, id);// 调用service删除部门deptService.delete(id);return Result.success();}/*** 添加部门* return*/PostMapping(/depts)public Result add(RequestBody Dept dept){log.info(新增部门{},dept);// // 调用service新增部门deptService.add(dept);return Result.success();} }2.3.3 DeptService  package com.runa.service;import com.runa.pojo.Dept;import java.util.List;public interface DeptService {/*** 查询全部 部门数据* return*/ListDept list();/*** 依据id删除部门* param id*/void delete(Integer id);/*** 新增部门* param dept*/void add(Dept dept); }2.3.4 DeptServiceImpl package com.runa.service.impl;import com.runa.mapper.DeptMapper; import com.runa.pojo.Dept; import com.runa.service.DeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.LocalDateTime; import java.util.List;Service public class DeptServiceImpl implements DeptService {Autowiredprivate DeptMapper deptMapper;/*** 查询部门* return*/Overridepublic ListDept list() {return deptMapper.list();}/*** 根据ID删除部门* param id*/Overridepublic void delete(Integer id) {deptMapper.deleteById(id);}/*** 新增部门* param dept*/Overridepublic void add(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setUpdateTime(LocalDateTime.now());deptMapper.insert(dept);} }2.3.5 DeptMapper  package com.runa.mapper;import com.runa.pojo.Dept; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.util.List;/*** 部门管理*/ Mapper public interface DeptMapper {/*** 查询全部部门* return*/Select(select * from springbootproject.dept)ListDept list();/*** 根据id删除部门*/Delete(delete from dept where id #{id})void deleteById(Integer id);/*** 新增部门*/Insert(insert into dept(name,create_time,update_time) values (#{name}, #{createTime}, #{updateTime}))void insert(Dept dept); }2.3.6 启动服务-测试  2.3.7 前后端联调  2.4 优化DeptController的路径 package com.runa.controller;import com.runa.pojo.Dept; import com.runa.pojo.Result; import com.runa.service.DeptService; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;/*** 部门管理Controller*/ Slf4j RequestMapping(/depts) RestController public class Deptcontroller {Autowiredprivate DeptService deptService;/*** 查询部门数据* return*/ // private static Logger log LoggerFactory.getLogger(Deptcontroller.class); // RequestMapping(value /depts, method RequestMethod.GET) //指定请求方式为GETGetMapping //public Result list(){log.info(查询全部部门数据);// 调用 service查询部门数据ListDept deptList deptService.list();return Result.success(deptList);}/*** 删除部门* return*/DeleteMapping(/{id})public Result delete(PathVariable Integer id){log.info(根据id删除部门{}, id);// 调用service删除部门deptService.delete(id);return Result.success();}/*** 添加部门* return*/PostMappingpublic Result add(RequestBody Dept dept){log.info(新增部门{},dept);// // 调用service新增部门deptService.add(dept);return Result.success();} }2.5 根据id查询部门  2.5.1 DeptController package com.runa.controller;import com.runa.pojo.Dept; import com.runa.pojo.Result; import com.runa.service.DeptService; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;/*** 部门管理Controller*/ Slf4j RestController RequestMapping(/depts) public class Deptcontroller {Autowiredprivate DeptService deptService;/*** 查询部门数据* return*/ // private static Logger log LoggerFactory.getLogger(Deptcontroller.class); // RequestMapping(value /depts, method RequestMethod.GET) //指定请求方式为GETGetMapping //public Result list(){log.info(查询全部部门数据);// 调用 service查询部门数据ListDept deptList deptService.list();return Result.success(deptList);}/*** 删除部门* return*/DeleteMapping(/{id})public Result delete(PathVariable Integer id){log.info(根据id删除部门{}, id);// 调用service删除部门deptService.delete(id);return Result.success();}/*** 添加部门* return*/PostMappingpublic Result add(RequestBody Dept dept){log.info(新增部门{},dept);// // 调用service新增部门deptService.add(dept);return Result.success();}/*** 根据ID查询部门* return*/GetMapping(/{id})public Result getById(PathVariable Integer id){log.info(根据id查询部门{}, id);// 调用service查询部门Dept dept deptService.getById(id);return Result.success(dept);} }2.5.2 DeptService  package com.runa.service;import com.runa.pojo.Dept;import java.util.List;public interface DeptService {/*** 查询全部 部门数据* return*/ListDept list();/*** 依据id删除部门* param id*/void delete(Integer id);/*** 新增部门* param dept*/void add(Dept dept);/*** 根据id查询部门* param id* return*/Dept getById(Integer id); }2.5.3 DeptServiceImpl package com.runa.service.impl;import com.runa.mapper.DeptMapper; import com.runa.pojo.Dept; import com.runa.service.DeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.LocalDateTime; import java.util.List;Service public class DeptServiceImpl implements DeptService {Autowiredprivate DeptMapper deptMapper;/*** 查询部门* return*/Overridepublic ListDept list() {return deptMapper.list();}/*** 根据ID删除部门* param id*/Overridepublic void delete(Integer id) {deptMapper.deleteById(id);}/*** 新增部门* param dept*/Overridepublic void add(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setUpdateTime(LocalDateTime.now());deptMapper.insert(dept);}/*** 根据id查询部门* param id* return*/Overridepublic Dept getById(Integer id) {return deptMapper.getById(id);} }2.5.4 DeptMapper  package com.runa.mapper;import com.runa.pojo.Dept; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.util.List;/*** 部门管理*/ Mapper public interface DeptMapper {/*** 查询全部部门* return*/Select(select * from springbootproject.dept)ListDept list();/*** 根据id删除部门*/Delete(delete from dept where id #{id})void deleteById(Integer id);/*** 新增部门*/Insert(insert into dept(name,create_time,update_time) values (#{name}, #{createTime}, #{updateTime}))void insert(Dept dept);/*** 根据id查询部门* return*/Select(select * from springbootproject.dept where id #{id})Dept getById(Integer id); }2.5.5 启动服务-测试 2.5.6 前后端联调 2.6 修改部门  2.6.1 DeptController package com.runa.controller;import com.runa.pojo.Dept; import com.runa.pojo.Result; import com.runa.service.DeptService; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;/*** 部门管理Controller*/ Slf4j RestController RequestMapping(/depts) public class Deptcontroller {Autowiredprivate DeptService deptService;/*** 查询部门数据* return*/ // private static Logger log LoggerFactory.getLogger(Deptcontroller.class); // RequestMapping(value /depts, method RequestMethod.GET) //指定请求方式为GETGetMapping //public Result list(){log.info(查询全部部门数据);// 调用 service查询部门数据ListDept deptList deptService.list();return Result.success(deptList);}/*** 删除部门* return*/DeleteMapping(/{id})public Result delete(PathVariable Integer id){log.info(根据id删除部门{}, id);// 调用service删除部门deptService.delete(id);return Result.success();}/*** 添加部门* return*/PostMappingpublic Result add(RequestBody Dept dept){log.info(新增部门{},dept);// // 调用service新增部门deptService.add(dept);return Result.success();}/*** 根据ID查询部门* return*/GetMapping(/{id})public Result getById(PathVariable Integer id){log.info(根据id查询部门{}, id);// 调用service查询部门Dept dept deptService.getById(id);return Result.success(dept);}/*** 编辑部门* return*/PutMappingpublic Result update(RequestBody Dept dept){log.info(编辑部门{}{}, dept.getId(),dept.getName());// 调用service编辑部门deptService.update(dept);return Result.success();} }2.6.2 DeptService  package com.runa.service;import com.runa.pojo.Dept;import java.util.List;public interface DeptService {/*** 查询全部 部门数据* return*/ListDept list();/*** 依据id删除部门* param id*/void delete(Integer id);/*** 新增部门* param dept*/void add(Dept dept);/*** 根据id查询部门* param id* return*/Dept getById(Integer id);/*** 编辑用户*/void update(Dept dept);}2.6.3 DeptServiceImpl package com.runa.service.impl;import com.runa.mapper.DeptMapper; import com.runa.pojo.Dept; import com.runa.service.DeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.LocalDateTime; import java.util.List;Service public class DeptServiceImpl implements DeptService {Autowiredprivate DeptMapper deptMapper;/*** 查询部门* return*/Overridepublic ListDept list() {return deptMapper.list();}/*** 根据ID删除部门* param id*/Overridepublic void delete(Integer id) {deptMapper.deleteById(id);}/*** 新增部门* param dept*/Overridepublic void add(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setUpdateTime(LocalDateTime.now());deptMapper.insert(dept);}/*** 根据id查询部门* param id* return*/Overridepublic Dept getById(Integer id) {return deptMapper.getById(id);}/*** 编辑部门* param dept*/Overridepublic void update(Dept dept) {dept.setUpdateTime(LocalDateTime.now());deptMapper.update(dept);}}2.6.4 DeptMapper  package com.runa.mapper;import com.runa.pojo.Dept; import org.apache.ibatis.annotations.*;import java.util.List;/*** 部门管理*/ Mapper public interface DeptMapper {/*** 查询全部部门* return*/Select(select * from springbootproject.dept)ListDept list();/*** 根据id删除部门*/Delete(delete from dept where id #{id})void deleteById(Integer id);/*** 新增部门*/Insert(insert into dept(name,create_time,update_time) values (#{name}, #{createTime}, #{updateTime}))void insert(Dept dept);/*** 根据id查询部门* return*/Select(select * from springbootproject.dept where id #{id})Dept getById(Integer id);/*** 编辑部门*/Update(update dept set name #{name}, update_time #{updateTime} where id #{id})void update(Dept dept); }2.6.5 启动服务-测试 2.6.6 前后端联调 三、员工管理 3.1 分页查询 3.1.1 思路 3.1.2 PageBean分页查询结果实体类 package com.runa.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;/*** 分页查询的结果类*/ Data NoArgsConstructor AllArgsConstructor public class PageBean {// 这里的定义名称要与接口文档一致性private long total; // 总记录数private List rows; //数据列表}3.1.3 EmpController package com.runa.controller;import com.runa.pojo.PageBean; import com.runa.pojo.Result;import com.runa.service.EmpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;/*** 员工管理Controller*/ Slf4j RequestMapping(/emps) RestController public class EmpController {Autowiredprivate EmpService empService;GetMappingpublic Result page(RequestParam(defaultValue 1) Integer page, RequestParam(defaultValue 10) Integer pageSize){log.info(分页查询参数开始页 {}, 每页显示{}, page, pageSize);// 调用Service方法进行查询PageBean pageBean empService.page(page,pageSize);return Result.success(pageBean);} }3.1.4 EmpService package com.runa.service;import com.runa.pojo.PageBean;public interface EmpService {/*** 分页查询* param page* param pageSize* return*/PageBean page(Integer page, Integer pageSize);}3.1.5 EmpServiceImpl package com.runa.service.impl;import com.runa.mapper.EmpMapper; import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.service.EmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;Service public class EmpServiceImpl implements EmpService {Autowiredprivate EmpMapper empMapper;/*** 分页查询* param page* param pageSize* return*/Overridepublic PageBean page(Integer page, Integer pageSize) {// 1 获取总记录数Long count empMapper.count();// 2 获取分页查询结果列表Integer start (page - 1) * pageSize;ListEmp empList empMapper.page(start, pageSize);// 3 封装PangeBean对象PageBean pageBean new PageBean(count,empList);return pageBean;} }3.1.6 EmpMapper package com.runa.mapper;import com.runa.pojo.Emp; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.util.List;/*** 员工管理*/ Mapper public interface EmpMapper {/*** 查询总记录数* return*/Select(select count(*) from emp)public Long count();/*** 分页查询 获取列表数据* param start* param pageSize* return*/Select(select * from emp limit #{start}, #{pageSize})public ListEmp page(Integer start, Integer pageSize); }3.1.7 启动服务-测试 控制台没有看到这个就说明pagehelper版本有问题 3.1.8 前后端联调 3.1.9 总结 3.1.10 使用分页插件 PageHelper优化代码 3.1.10.1 引入 PageHelper依赖 使用1.4.2版本没有成功换成1.4.6就OK了 !-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter --dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactIdversion1.4.6/version/dependency 3.1.10.2 EmpMapper package com.runa.mapper;import com.runa.pojo.Emp; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.util.List;/*** 员工管理*/ Mapper public interface EmpMapper {/*** 查询总记录数* return*/ // Select(select count(*) from emp) // public Long count();/*** 分页查询 获取列表数据* param start* param pageSize* return*/ // Select(select * from emp limit #{start}, #{pageSize}) // public ListEmp page(Integer start, Integer pageSize);/*** 使用pagehelper的员工信息查询* return*/Select(select * from emp)public ListEmp list();}3.1.10.3 EmpServiceImpl package com.runa.service.impl;import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.runa.mapper.EmpMapper; import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.service.EmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;Service public class EmpServiceImpl implements EmpService {Autowiredprivate EmpMapper empMapper;/*** 分页查询* param page* param pageSize* return*/Overridepublic PageBean page(Integer page, Integer pageSize) { // // 1 获取总记录数 // Long count empMapper.count(); // // // 2 获取分页查询结果列表 // Integer start (page - 1) * pageSize; // ListEmp empList empMapper.page(start, pageSize); // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(count,empList);// 1 设置分页参数PageHelper.startPage(page, pageSize);// 2 执行查询ListEmp empList empMapper.list();PageEmp p (PageEmp) empList;// 3 封装PangeBean对象PageBean pageBean new PageBean(p.getTotal(),p.getResult());return pageBean;} }3.1.10.4 启动服务-测试 3.1.10.5 前后端联调 3.1.10.6 总结 3.2 分页查询带条件  3.2.1 思路  3.2.2 EmpController package com.runa.controller;import com.runa.pojo.PageBean; import com.runa.pojo.Result;import com.runa.service.EmpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;import java.time.LocalDate;/*** 员工管理Controller*/ Slf4j RequestMapping(/emps) RestController public class EmpController {Autowiredprivate EmpService empService;/*** 员工数据查询列表 不带条件* param page* param pageSize* return*/// GetMapping // public Result page(RequestParam(defaultValue 1) Integer page, // RequestParam(defaultValue 10) Integer pageSize){ // log.info(分页查询参数开始页 {}, 每页显示{}, page, pageSize); // // 调用Service方法进行查询 // PageBean pageBean empService.page(page,pageSize); // // return Result.success(pageBean); // }/*** 员工数据查询列表 带条件组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/GetMappingpublic Result page(RequestParam(defaultValue 1) Integer page,RequestParam(defaultValue 10) Integer pageSize,String name, Short gender,DateTimeFormat(pattern yyyy-MM-dd) LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd) LocalDate end){log.info(分页查询参数开始页 {}, 每页显示{},姓名{},性别{}, 开始日期{},结束日期:{}, page, pageSize, name, gender, begin, end);// 调用Service方法进行查询PageBean pageBean empService.page(page, pageSize, name, gender, begin, end);return Result.success(pageBean);}}3.2.3 EmpService package com.runa.service;import com.runa.pojo.PageBean; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDate;public interface EmpService {/*** 分页查询 不带条件* param page* param pageSize* return*/ // PageBean page(Integer page, Integer pageSize);/*** 分页查询 带条件* param page* param pageSize* return*/PageBean page(Integer page, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);}3.2.4 EmpServiceImpl package com.runa.service.impl;import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.runa.mapper.EmpMapper; import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.service.EmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.LocalDate; import java.util.List;Service public class EmpServiceImpl implements EmpService {Autowiredprivate EmpMapper empMapper;/*** 分页查询 pagehelper组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {// 1 设置分页参数PageHelper.startPage(page, pageSize);// 2 执行查询ListEmp empList empMapper.list(name, gender, begin, end);PageEmp p (PageEmp) empList;// 3 封装PangeBean对象PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult());return pageBean;}/*** 分页查询 加pagehelper* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 设置分页参数 // PageHelper.startPage(page, pageSize); // // // 2 执行查询 // ListEmp empList empMapper.list(); // PageEmp p (PageEmp) empList; // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult()); // return pageBean; // }/*** 分页查询* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 获取总记录数 // Long count empMapper.count(); // // // 2 获取分页查询结果列表 // Integer start (page - 1) * pageSize; // ListEmp empList empMapper.page(start, pageSize); // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(count,empList); // }}3.2.5 EmpMapper package com.runa.mapper;import com.runa.pojo.Emp; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.time.LocalDate; import java.util.List;/*** 员工管理*/ Mapper public interface EmpMapper {/*** 查询总记录数* return*/ // Select(select count(*) from emp) // public Long count();/*** 分页查询 获取列表数据* param start* param pageSize* return*/ // Select(select * from emp limit #{start}, #{pageSize}) // public ListEmp page(Integer start, Integer pageSize);/*** 使用pagehelper的员工信息查询* return*/ // Select(select * from emp) // public ListEmp list();/*** 使用pagehelper的员工信息查询(带条件)--动态sql* 使用xml注解sql* return*/public ListEmp list(String name, Short gender, LocalDate begin, LocalDate end);}3.2.6 EmpMapper.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.runa.mapper.EmpMapperselect idlist resultTypecom.runa.pojo.Empselect * from empwhereif testname ! nullname like concat(%, #{name}, %)/ifif testgender ! nulland gender #{gender}/ifif testbegin ! null and end ! nulland entrydate between #{begin} and #{end}/iforder by update_time desc/where/select/mapper 注意sql不要有结束符号  3.2.7 启动服务-测试 3.2.8 前后端联调 3.2.9 总结 3.3 删除员工  3.3.1 思路 3.3.2 EmpController package com.runa.controller;import com.runa.pojo.PageBean; import com.runa.pojo.Result;import com.runa.service.EmpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*;import java.time.LocalDate; import java.util.List;/*** 员工管理Controller*/ Slf4j RequestMapping(/emps) RestController public class EmpController {Autowiredprivate EmpService empService;/*** 员工数据查询列表 不带条件* param page* param pageSize* return*/// GetMapping // public Result page(RequestParam(defaultValue 1) Integer page, // RequestParam(defaultValue 10) Integer pageSize){ // log.info(分页查询参数开始页 {}, 每页显示{}, page, pageSize); // // 调用Service方法进行查询 // PageBean pageBean empService.page(page,pageSize); // // return Result.success(pageBean); // }/*** 员工数据查询列表 带条件组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/GetMappingpublic Result page(RequestParam(defaultValue 1) Integer page,RequestParam(defaultValue 10) Integer pageSize,String name, Short gender,DateTimeFormat(pattern yyyy-MM-dd) LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd) LocalDate end){log.info(分页查询参数开始页 {}, 每页显示{},姓名{},性别{}, 开始日期{},结束日期:{}, page, pageSize, name, gender, begin, end);// 调用Service方法进行查询PageBean pageBean empService.page(page, pageSize, name, gender, begin, end);return Result.success(pageBean);}/*** 批量删除员工* param ids* return*/DeleteMapping(/{ids})public Result delete(PathVariable ListInteger ids){log.info(批量删除的操作,删除对象为{},ids);empService.delete(ids);return Result.success();}}3.3.3 EmpService package com.runa.service;import com.runa.pojo.PageBean; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDate; import java.util.List;public interface EmpService {/*** 分页查询 不带条件* param page* param pageSize* return*/ // PageBean page(Integer page, Integer pageSize);/*** 分页查询 带条件* param page* param pageSize* return*/PageBean page(Integer page, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工* param ids*/void delete(ListInteger ids); }3.3.4 EmpServiceImpl package com.runa.service.impl;import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.runa.mapper.EmpMapper; import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.service.EmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.LocalDate; import java.util.List;Service public class EmpServiceImpl implements EmpService {Autowiredprivate EmpMapper empMapper;/*** 分页查询 pagehelper组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {// 1 设置分页参数PageHelper.startPage(page, pageSize);// 2 执行查询ListEmp empList empMapper.list(name, gender, begin, end);PageEmp p (PageEmp) empList;// 3 封装PangeBean对象PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult());return pageBean;}/*** 批量删除员工* param ids*/Overridepublic void delete(ListInteger ids) {empMapper.delete(ids);}/*** 分页查询 加pagehelper* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 设置分页参数 // PageHelper.startPage(page, pageSize); // // // 2 执行查询 // ListEmp empList empMapper.list(); // PageEmp p (PageEmp) empList; // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult()); // return pageBean; // }/*** 分页查询* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 获取总记录数 // Long count empMapper.count(); // // // 2 获取分页查询结果列表 // Integer start (page - 1) * pageSize; // ListEmp empList empMapper.page(start, pageSize); // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(count,empList); // }}3.3.5 EmpMapper.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.runa.mapper.EmpMapper!-- 批量删除员工 --delete iddeletedelete from emp where id inforeach collectionids itemid separator, open( close)#{id}/foreach/delete!-- 条件查询--select idlist resultTypecom.runa.pojo.Empselect * from empwhereif testname ! nullname like concat(%, #{name}, %)/ifif testgender ! nulland gender #{gender}/ifif testbegin ! null and end ! nulland entrydate between #{begin} and #{end}/iforder by update_time desc/where/select/mapper 3.3.6 EmpMapper package com.runa.mapper;import com.runa.pojo.Emp; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.time.LocalDate; import java.util.List;/*** 员工管理*/ Mapper public interface EmpMapper {/*** 查询总记录数* return*/ // Select(select count(*) from emp) // public Long count();/*** 分页查询 获取列表数据* param start* param pageSize* return*/ // Select(select * from emp limit #{start}, #{pageSize}) // public ListEmp page(Integer start, Integer pageSize);/*** 使用pagehelper的员工信息查询* return*/ // Select(select * from emp) // public ListEmp list();/*** 使用pagehelper的员工信息查询(带条件)--动态sql* 使用xml注解sql* return*/public ListEmp list(String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工* param ids*/void delete(ListInteger ids); }3.3.7 启动服务-测试 3.3.8 前后端联调 3.4 新增员工  3.4.1 思路 3.4.2 EmpController package com.runa.controller;import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.pojo.Result;import com.runa.service.EmpService; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*;import java.time.LocalDate; import java.util.List;/*** 员工管理Controller*/ Slf4j RequestMapping(/emps) RestController public class EmpController {Autowiredprivate EmpService empService;/*** 员工数据查询列表 不带条件* param page* param pageSize* return*/// GetMapping // public Result page(RequestParam(defaultValue 1) Integer page, // RequestParam(defaultValue 10) Integer pageSize){ // log.info(分页查询参数开始页 {}, 每页显示{}, page, pageSize); // // 调用Service方法进行查询 // PageBean pageBean empService.page(page,pageSize); // // return Result.success(pageBean); // }/*** 员工数据查询列表 带条件组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/GetMappingpublic Result page(RequestParam(defaultValue 1) Integer page,RequestParam(defaultValue 10) Integer pageSize,String name, Short gender,DateTimeFormat(pattern yyyy-MM-dd) LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd) LocalDate end){log.info(分页查询参数开始页 {}, 每页显示{},姓名{},性别{}, 开始日期{},结束日期:{}, page, pageSize, name, gender, begin, end);// 调用Service方法进行查询PageBean pageBean empService.page(page, pageSize, name, gender, begin, end);return Result.success(pageBean);}/*** 批量删除员工* param ids* return*/DeleteMapping(/{ids})public Result delete(PathVariable ListInteger ids){log.info(批量删除的操作,删除对象为{},ids);empService.delete(ids);return Result.success();}/*** 新增员工* param emp* return*/PostMappingpublic Result save(RequestBody Emp emp){log.info(新增员工emp {},emp);empService.save(emp);return Result.success();}}3.4.3 EmpService package com.runa.service;import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDate; import java.util.List;public interface EmpService {/*** 分页查询 不带条件* param page* param pageSize* return*/ // PageBean page(Integer page, Integer pageSize);/*** 分页查询 带条件* param page* param pageSize* return*/PageBean page(Integer page, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工* param ids*/void delete(ListInteger ids);/*** 新增员工* param emp*/void save(Emp emp); }3.4.4 EmpServiceImpl package com.runa.service.impl;import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.runa.mapper.EmpMapper; import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.service.EmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List;Service public class EmpServiceImpl implements EmpService {Autowiredprivate EmpMapper empMapper;/*** 分页查询 pagehelper组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {// 1 设置分页参数PageHelper.startPage(page, pageSize);// 2 执行查询ListEmp empList empMapper.list(name, gender, begin, end);PageEmp p (PageEmp) empList;// 3 封装PangeBean对象PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult());return pageBean;}/*** 批量删除员工* param ids*/Overridepublic void delete(ListInteger ids) {empMapper.delete(ids);}/*** 新增员工* param emp*/Overridepublic void save(Emp emp) {emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empMapper.insert(emp);}/*** 分页查询 加pagehelper* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 设置分页参数 // PageHelper.startPage(page, pageSize); // // // 2 执行查询 // ListEmp empList empMapper.list(); // PageEmp p (PageEmp) empList; // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult()); // return pageBean; // }/*** 分页查询* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 获取总记录数 // Long count empMapper.count(); // // // 2 获取分页查询结果列表 // Integer start (page - 1) * pageSize; // ListEmp empList empMapper.page(start, pageSize); // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(count,empList); // }}3.4.5 EmpMapper package com.runa.mapper;import com.runa.pojo.Emp; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper;import java.time.LocalDate; import java.util.List;/*** 员工管理*/ Mapper public interface EmpMapper {/*** 查询总记录数* return*/ // Select(select count(*) from emp) // public Long count();/*** 分页查询 获取列表数据* param start* param pageSize* return*/ // Select(select * from emp limit #{start}, #{pageSize}) // public ListEmp page(Integer start, Integer pageSize);/*** 使用pagehelper的员工信息查询* return*/ // Select(select * from emp) // public ListEmp list();/*** 使用pagehelper的员工信息查询(带条件)--动态sql* 使用xml注解sql* return*/public ListEmp list(String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工* param ids*/void delete(ListInteger ids);/*** 新增员工* param emp*/Insert(insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values(#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime}))void insert(Emp emp); }3.4.6 启动服务-测试 3.4.7 前后端联调 3.5 文件上传  3.5.1 简介 3.5.1.1 upload.html !DOCTYPE html html langen headmeta charsetUTF-8title上传文件/title /head bodyform action/upload methodpost enctypemultipart/form-data姓名: input typetext nameusernamebr年龄: input typetext nameagebr头像: input typefile nameimagebrinput typesubmit value提交/form/body /htmltxt 内容自己定义即可 3.5.1.2 UploadController package com.runa.controller;import com.runa.pojo.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;Slf4j RestController public class UploadController {PostMapping(/upload)public Result upload(String username, Integer age, MultipartFile image){log.info(文件上传{},{},{},username,age,image);return Result.success();} }3.5.1.3 启动服务-测试 多试几次 http://localhost:8080/upload.html 3.5.1.4 总结 3.5.2 本地存储 3.5.2.1 UploadController package com.runa.controller;import com.runa.pojo.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;import java.io.File; import java.io.IOException;Slf4j RestController public class UploadController {PostMapping(/upload)public Result upload(String username, Integer age, MultipartFile image) throws Exception {log.info(文件上传{},{},{},username,age,image);// 将接收到的文件存储在服务器的磁盘目录当中 D:\image.transferTo(new File(D:\\images\\ image.getOriginalFilename()));return Result.success();} }3.5.2.2 启动服务-测试  3.5.2.3 优化确保存储文件名唯一UUIDUploadController package com.runa.controller;import com.runa.pojo.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;import java.io.File; import java.io.IOException; import java.util.UUID;Slf4j RestController public class UploadController {PostMapping(/upload)public Result upload(String username, Integer age, MultipartFile image) throws Exception {log.info(文件上传{},{},{},username,age,image);// 获取原始文件名String originalFilename image.getOriginalFilename();// 构造唯一的文件名不能重复 uuidint index originalFilename.lastIndexOf(.);String extname originalFilename.substring(index);String newFileName UUID.randomUUID().toString() extname;log.info( 新的文件名 {},newFileName);// 将接收到的文件存储在服务器的磁盘目录当中 D:\image.transferTo(new File(D:\\images\\ newFileName));return Result.success();} }3.5.2.4 优化配置文件上传大小application.properties #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://localhost:3306/springbootproject #连接数据库的用户名 spring.datasource.usernameroot #连接数据库的密码 spring.datasource.passwordruna#2050#配置mybatis的日志, 指定输出到控制台 mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl#开启mybatis的驼峰命名自动映射开关 a_column ------ aCloumn mybatis.configuration.map-underscore-to-camel-casetrue# 配置单个文件最大上传大小 spring.servlet.multipart.max-file-size10MB# 配置单个请求最大大小的限制一次请求中是可以上传多个文件 spring.servlet.multipart.max-request-size100MB3.5.2.5 扩展 3.5.3 阿里云OSS 3.5.3.1 通用思路  3.5.3.2 阿里云OSS准备工作 云存储解决方案-阿里云OSS 链接https://pan.baidu.com/s/16i8-kgqqW7r5xZ-5r-eTaQ  提取码私聊 3.5.3.3 安装依赖 !-- 阿里云OSS依赖--dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactIdversion3.15.1/version/dependencydependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version/dependencydependencygroupIdjavax.activation/groupIdartifactIdactivation/artifactIdversion1.1.1/version/dependency!-- no more than 2.3.3--dependencygroupIdorg.glassfish.jaxb/groupIdartifactIdjaxb-runtime/artifactIdversion2.3.3/version/dependency 3.5.3.4 示例代码 package com.runa;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectResult; import java.io.FileInputStream; import java.io.InputStream;public class Demo {public static void main(String[] args) throws Exception {// Endpoint以华东1杭州为例其它Region请按实际情况填写。String endpoint https://oss-cn-hangzhou.aliyuncs.com;// 从环境变量中获取访问凭证。运行本代码示例之前请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。EnvironmentVariableCredentialsProvider credentialsProvider CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 填写Bucket名称例如examplebucket。String bucketName examplebucket;// 填写Object完整路径完整路径中不能包含Bucket名称例如exampledir/exampleobject.txt。String objectName exampledir/exampleobject.txt;// 填写本地文件的完整路径例如D:\\localpath\\examplefile.txt。// 如果未指定本地路径则默认从示例程序所属项目对应本地路径中上传文件流。String filePath D:\\localpath\\examplefile.txt;// 创建OSSClient实例。OSS ossClient new OSSClientBuilder().build(endpoint, credentialsProvider);try {InputStream inputStream new FileInputStream(filePath);// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest new PutObjectRequest(bucketName, objectName, inputStream);// 创建PutObject请求。PutObjectResult result ossClient.putObject(putObjectRequest);} catch (OSSException oe) {System.out.println(Caught an OSSException, which means your request made it to OSS, but was rejected with an error response for some reason.);System.out.println(Error Message: oe.getErrorMessage());System.out.println(Error Code: oe.getErrorCode());System.out.println(Request ID: oe.getRequestId());System.out.println(Host ID: oe.getHostId());} catch (ClientException ce) {System.out.println(Caught an ClientException, which means the client encountered a serious internal problem while trying to communicate with OSS, such as not being able to access the network.);System.out.println(Error Message: ce.getMessage());} finally {if (ossClient ! null) {ossClient.shutdown();}}} } 依据自己的修改代码  运行main 3.6 新增页面集成文件上传阿里云OOS 3.6.1 思路 3.6.2  引人阿里云上传OSS上传文件工具类 package com.runa.utils;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.util.UUID;/*** 阿里云 OSS 工具类*/ Component public class AliOSSUtils {private String endpoint https://oss-cn-hangzhou.aliyuncs.com;private String accessKeyId LTAI4GCH1vX6DKqJWxd6nEuW;private String accessKeySecret yBshYweHOpqDuhCArrVHwIiBKpyqSL;private String bucketName web-tlias;/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {// 获取上传的文件的输入流InputStream inputStream file.getInputStream();// 避免文件覆盖String originalFilename file.getOriginalFilename();String fileName UUID.randomUUID().toString() originalFilename.substring(originalFilename.lastIndexOf(.));//上传文件到 OSSOSS ossClient new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url endpoint.split(//)[0] // bucketName . endpoint.split(//)[1] / fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}3.6.3 UploadController package com.runa.controller;import com.runa.pojo.Result; import com.runa.utils.AliOSSUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;import java.io.File; import java.io.IOException; import java.util.UUID;Slf4j RestController public class UploadController {Autowiredprivate AliOSSUtils aliOSSUtils; //注入// /** // * 本地存储代码 // * param username // * param age // * param image // * return // * throws Exception // */ // PostMapping(/upload) // public Result upload(String username, Integer age, MultipartFile image) throws Exception { // log.info(文件上传{},{},{},username,age,image); // // // 获取原始文件名 // String originalFilename image.getOriginalFilename(); // // // 构造唯一的文件名不能重复 uuid // int index originalFilename.lastIndexOf(.); // String extname originalFilename.substring(index); // // String newFileName UUID.randomUUID().toString() extname; // log.info( 新的文件名 {},newFileName); // // 将接收到的文件存储在服务器的磁盘目录当中 D:\ // image.transferTo(new File(D:\\images\\ newFileName)); // // return Result.success(); // }PostMapping(/upload)public Result upload(MultipartFile image) throws Exception {log.info(文件上传{},image.getOriginalFilename());// 调用阿里云OSS工具类String url aliOSSUtils.upload(image); //调用阿里云OSS工具类将上传上来的文件存入阿里云log.info(文件上传完成。文件访问url{},url);return Result.success(url); // 将图片上传完成后的url返回用于浏览器回显展示}}3.6.4 启动服务-测试 3.6.5 前后端联调 3.6.6 总结 3.7 修改员工 3.7.1 思路 3.7.2 查询回显  3.7.2.1 思路 3.7.2.2 EmpController package com.runa.controller;import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.pojo.Result;import com.runa.service.EmpService; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*;import java.time.LocalDate; import java.util.List;/*** 员工管理Controller*/ Slf4j RequestMapping(/emps) RestController public class EmpController {Autowiredprivate EmpService empService;/*** 员工数据查询列表 不带条件* param page* param pageSize* return*/// GetMapping // public Result page(RequestParam(defaultValue 1) Integer page, // RequestParam(defaultValue 10) Integer pageSize){ // log.info(分页查询参数开始页 {}, 每页显示{}, page, pageSize); // // 调用Service方法进行查询 // PageBean pageBean empService.page(page,pageSize); // // return Result.success(pageBean); // }/*** 员工数据查询列表 带条件组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/GetMappingpublic Result page(RequestParam(defaultValue 1) Integer page,RequestParam(defaultValue 10) Integer pageSize,String name, Short gender,DateTimeFormat(pattern yyyy-MM-dd) LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd) LocalDate end){log.info(分页查询参数开始页 {}, 每页显示{},姓名{},性别{}, 开始日期{},结束日期:{}, page, pageSize, name, gender, begin, end);// 调用Service方法进行查询PageBean pageBean empService.page(page, pageSize, name, gender, begin, end);return Result.success(pageBean);}/*** 批量删除员工* param ids* return*/DeleteMapping(/{ids})public Result delete(PathVariable ListInteger ids){log.info(批量删除的操作,删除对象为{},ids);empService.delete(ids);return Result.success();}/*** 新增员工* param emp* return*/PostMappingpublic Result save(RequestBody Emp emp){log.info(新增员工emp {},emp);empService.save(emp);return Result.success();}GetMapping(/{id})public Result getById(PathVariable Integer id){log.info(根据ID查询员工信息{},id);Emp emp empService.getById(id);return Result.success(emp);}}3.7.2.3 EmpService package com.runa.service;import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDate; import java.util.List;public interface EmpService {/*** 分页查询 不带条件* param page* param pageSize* return*/ // PageBean page(Integer page, Integer pageSize);/*** 分页查询 带条件* param page* param pageSize* return*/PageBean page(Integer page, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工* param ids*/void delete(ListInteger ids);/*** 新增员工* param emp*/void save(Emp emp);/*** 根据id查询员工* param id* return*/Emp getById(Integer id); }3.7.2.4 EmpServiceImpl package com.runa.service.impl;import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.runa.mapper.EmpMapper; import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.service.EmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List;Service public class EmpServiceImpl implements EmpService {Autowiredprivate EmpMapper empMapper;/*** 分页查询 pagehelper组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {// 1 设置分页参数PageHelper.startPage(page, pageSize);// 2 执行查询ListEmp empList empMapper.list(name, gender, begin, end);PageEmp p (PageEmp) empList;// 3 封装PangeBean对象PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult());return pageBean;}/*** 批量删除员工* param ids*/Overridepublic void delete(ListInteger ids) {empMapper.delete(ids);}/*** 新增员工* param emp*/Overridepublic void save(Emp emp) {emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empMapper.insert(emp);}/*** 根据ID查询员工* param id* return*/Overridepublic Emp getById(Integer id) {return empMapper.getByID(id);}/*** 分页查询 加pagehelper* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 设置分页参数 // PageHelper.startPage(page, pageSize); // // // 2 执行查询 // ListEmp empList empMapper.list(); // PageEmp p (PageEmp) empList; // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult()); // return pageBean; // }/*** 分页查询* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 获取总记录数 // Long count empMapper.count(); // // // 2 获取分页查询结果列表 // Integer start (page - 1) * pageSize; // ListEmp empList empMapper.page(start, pageSize); // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(count,empList); // }}3.7.2.5 EmpMapper package com.runa.mapper;import com.runa.pojo.Emp; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.time.LocalDate; import java.util.List;/*** 员工管理*/ Mapper public interface EmpMapper {/*** 查询总记录数* return*/ // Select(select count(*) from emp) // public Long count();/*** 分页查询 获取列表数据* param start* param pageSize* return*/ // Select(select * from emp limit #{start}, #{pageSize}) // public ListEmp page(Integer start, Integer pageSize);/*** 使用pagehelper的员工信息查询* return*/ // Select(select * from emp) // public ListEmp list();/*** 使用pagehelper的员工信息查询(带条件)--动态sql* 使用xml注解sql* return*/public ListEmp list(String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工* param ids*/void delete(ListInteger ids);/*** 新增员工* param emp*/Insert(insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values(#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime}))void insert(Emp emp);/*** 根据id查询员工* param id* return*/Select(select * from emp where id #{id})Emp getByID(Integer id); }3.7.2.6 启动服务-测试 3.7.2.7 前后端联调 3.7.3 修改员工 3.7.3.1 思路 3.7.3.2 EmpController package com.runa.controller;import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.pojo.Result;import com.runa.service.EmpService; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*;import java.time.LocalDate; import java.util.List;/*** 员工管理Controller*/ Slf4j RequestMapping(/emps) RestController public class EmpController {Autowiredprivate EmpService empService;/*** 员工数据查询列表 不带条件* param page* param pageSize* return*/// GetMapping // public Result page(RequestParam(defaultValue 1) Integer page, // RequestParam(defaultValue 10) Integer pageSize){ // log.info(分页查询参数开始页 {}, 每页显示{}, page, pageSize); // // 调用Service方法进行查询 // PageBean pageBean empService.page(page,pageSize); // // return Result.success(pageBean); // }/*** 员工数据查询列表 带条件组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/GetMappingpublic Result page(RequestParam(defaultValue 1) Integer page,RequestParam(defaultValue 10) Integer pageSize,String name, Short gender,DateTimeFormat(pattern yyyy-MM-dd) LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd) LocalDate end){log.info(分页查询参数开始页 {}, 每页显示{},姓名{},性别{}, 开始日期{},结束日期:{}, page, pageSize, name, gender, begin, end);// 调用Service方法进行查询PageBean pageBean empService.page(page, pageSize, name, gender, begin, end);return Result.success(pageBean);}/*** 批量删除员工* param ids* return*/DeleteMapping(/{ids})public Result delete(PathVariable ListInteger ids){log.info(批量删除的操作,删除对象为{},ids);empService.delete(ids);return Result.success();}/*** 新增员工* param emp* return*/PostMappingpublic Result save(RequestBody Emp emp){log.info(新增员工emp {},emp);empService.save(emp);return Result.success();}/*** 根据id查询员工* param id* return*/GetMapping(/{id})public Result getById(PathVariable Integer id){log.info(根据ID查询员工信息{},id);Emp emp empService.getById(id);return Result.success(emp);}/*** 修改员工* param emp* return*/PutMappingpublic Result update(RequestBody Emp emp){log.info(更新员工: {},emp);empService.update(emp);return Result.success();}}3.7.3.3 EmpService package com.runa.service;import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDate; import java.util.List;public interface EmpService {/*** 分页查询 不带条件* param page* param pageSize* return*/ // PageBean page(Integer page, Integer pageSize);/*** 分页查询 带条件* param page* param pageSize* return*/PageBean page(Integer page, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工* param ids*/void delete(ListInteger ids);/*** 新增员工* param emp*/void save(Emp emp);/*** 根据id查询员工* param id* return*/Emp getById(Integer id);/*** 修改员工* param emp*/void update(Emp emp); }3.7.3.4 EmpServiceImpl package com.runa.service.impl;import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.runa.mapper.EmpMapper; import com.runa.pojo.Emp; import com.runa.pojo.PageBean; import com.runa.service.EmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List;Service public class EmpServiceImpl implements EmpService {Autowiredprivate EmpMapper empMapper;/*** 分页查询 pagehelper组合查询* param page* param pageSize* param name* param gender* param begin* param end* return*/Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {// 1 设置分页参数PageHelper.startPage(page, pageSize);// 2 执行查询ListEmp empList empMapper.list(name, gender, begin, end);PageEmp p (PageEmp) empList;// 3 封装PangeBean对象PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult());return pageBean;}/*** 批量删除员工* param ids*/Overridepublic void delete(ListInteger ids) {empMapper.delete(ids);}/*** 新增员工* param emp*/Overridepublic void save(Emp emp) {emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empMapper.insert(emp);}/*** 根据ID查询员工* param id* return*/Overridepublic Emp getById(Integer id) {return empMapper.getByID(id);}/*** 修改员工* param emp*/Overridepublic void update(Emp emp) {emp.setUpdateTime(LocalDateTime.now());empMapper.update(emp);}/*** 分页查询 加pagehelper* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 设置分页参数 // PageHelper.startPage(page, pageSize); // // // 2 执行查询 // ListEmp empList empMapper.list(); // PageEmp p (PageEmp) empList; // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(p.getTotal(),((PageEmp) empList).getResult()); // return pageBean; // }/*** 分页查询* param page* param pageSize* return*/ // Override // public PageBean page(Integer page, Integer pageSize) { // // 1 获取总记录数 // Long count empMapper.count(); // // // 2 获取分页查询结果列表 // Integer start (page - 1) * pageSize; // ListEmp empList empMapper.page(start, pageSize); // // // 3 封装PangeBean对象 // PageBean pageBean new PageBean(count,empList); // }}3.7.3.5  EmpMapper package com.runa.mapper;import com.runa.pojo.Emp; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.time.LocalDate; import java.util.List;/*** 员工管理*/ Mapper public interface EmpMapper {/*** 查询总记录数* return*/ // Select(select count(*) from emp) // public Long count();/*** 分页查询 获取列表数据* param start* param pageSize* return*/ // Select(select * from emp limit #{start}, #{pageSize}) // public ListEmp page(Integer start, Integer pageSize);/*** 使用pagehelper的员工信息查询* return*/ // Select(select * from emp) // public ListEmp list();/*** 使用pagehelper的员工信息查询(带条件)--动态sql* 使用xml注解sql* return*/public ListEmp list(String name, Short gender, LocalDate begin, LocalDate end);/*** 批量删除员工* param ids*/void delete(ListInteger ids);/*** 新增员工* param emp*/Insert(insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values(#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime}))void insert(Emp emp);/*** 根据id查询员工* param id* return*/Select(select * from emp where id #{id})Emp getByID(Integer id);/*** 修改员工* param emp*/void update(Emp emp); }3.7.3.6 EmpMapper.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.runa.mapper.EmpMapper !-- 修改员工--update idupdateupdate empsetif testusername ! null and username ! username #{username},/ifif testpassword ! null and password ! password #{password},/ifif testname ! null and name ! name #{name},/ifif testgender ! nullgender #{gender},/ifif testimage ! null and image ! image #{image},/ifif testjob ! nulljob #{job},/ifif testentrydate ! nullentrydate #{entrydate},/ifif testdeptId ! nulldept_id #{deptId},/ifif testupdateTime ! nullupdate_time #{updateTime}/if/setwhere id #{id}/update!-- 批量删除员工 --delete iddeletedelete from emp where id inforeach collectionids itemid separator, open( close)#{id}/foreach/delete!-- 条件查询--select idlist resultTypecom.runa.pojo.Empselect * from empwhereif testname ! nullname like concat(%, #{name}, %)/ifif testgender ! nulland gender #{gender}/ifif testbegin ! null and end ! nulland entrydate between #{begin} and #{end}/iforder by update_time desc/where/select/mapper 3.7.3.7 启动服务-测试 3.7.3.8 前后端联调
文章转载自:
http://www.morning.wklmj.cn.gov.cn.wklmj.cn
http://www.morning.gqcsd.cn.gov.cn.gqcsd.cn
http://www.morning.pkggl.cn.gov.cn.pkggl.cn
http://www.morning.wkws.cn.gov.cn.wkws.cn
http://www.morning.jypqx.cn.gov.cn.jypqx.cn
http://www.morning.dkcpt.cn.gov.cn.dkcpt.cn
http://www.morning.zknxh.cn.gov.cn.zknxh.cn
http://www.morning.brwnd.cn.gov.cn.brwnd.cn
http://www.morning.nrgdc.cn.gov.cn.nrgdc.cn
http://www.morning.hpjpy.cn.gov.cn.hpjpy.cn
http://www.morning.brkrt.cn.gov.cn.brkrt.cn
http://www.morning.zxhpx.cn.gov.cn.zxhpx.cn
http://www.morning.nlkm.cn.gov.cn.nlkm.cn
http://www.morning.cflxx.cn.gov.cn.cflxx.cn
http://www.morning.ffksr.cn.gov.cn.ffksr.cn
http://www.morning.rqgq.cn.gov.cn.rqgq.cn
http://www.morning.ylqpp.cn.gov.cn.ylqpp.cn
http://www.morning.tgpgx.cn.gov.cn.tgpgx.cn
http://www.morning.xdttq.cn.gov.cn.xdttq.cn
http://www.morning.lhptg.cn.gov.cn.lhptg.cn
http://www.morning.ljqd.cn.gov.cn.ljqd.cn
http://www.morning.lwyqd.cn.gov.cn.lwyqd.cn
http://www.morning.mtbth.cn.gov.cn.mtbth.cn
http://www.morning.mqxrx.cn.gov.cn.mqxrx.cn
http://www.morning.weiwt.com.gov.cn.weiwt.com
http://www.morning.fgkwh.cn.gov.cn.fgkwh.cn
http://www.morning.yprjy.cn.gov.cn.yprjy.cn
http://www.morning.dmwbs.cn.gov.cn.dmwbs.cn
http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn
http://www.morning.cniedu.com.gov.cn.cniedu.com
http://www.morning.jkftn.cn.gov.cn.jkftn.cn
http://www.morning.wqcz.cn.gov.cn.wqcz.cn
http://www.morning.rbkl.cn.gov.cn.rbkl.cn
http://www.morning.zrnph.cn.gov.cn.zrnph.cn
http://www.morning.sjzsjsm.com.gov.cn.sjzsjsm.com
http://www.morning.cpzkq.cn.gov.cn.cpzkq.cn
http://www.morning.wcqkp.cn.gov.cn.wcqkp.cn
http://www.morning.xnymt.cn.gov.cn.xnymt.cn
http://www.morning.myxps.cn.gov.cn.myxps.cn
http://www.morning.darwallet.cn.gov.cn.darwallet.cn
http://www.morning.zkpwk.cn.gov.cn.zkpwk.cn
http://www.morning.gdgylp.com.gov.cn.gdgylp.com
http://www.morning.mxptg.cn.gov.cn.mxptg.cn
http://www.morning.ypcd.cn.gov.cn.ypcd.cn
http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn
http://www.morning.rgyts.cn.gov.cn.rgyts.cn
http://www.morning.hmtft.cn.gov.cn.hmtft.cn
http://www.morning.zrgdd.cn.gov.cn.zrgdd.cn
http://www.morning.rhkgz.cn.gov.cn.rhkgz.cn
http://www.morning.sypby.cn.gov.cn.sypby.cn
http://www.morning.wsnjn.cn.gov.cn.wsnjn.cn
http://www.morning.lrjtx.cn.gov.cn.lrjtx.cn
http://www.morning.sbyhj.cn.gov.cn.sbyhj.cn
http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn
http://www.morning.zpkfb.cn.gov.cn.zpkfb.cn
http://www.morning.yxplz.cn.gov.cn.yxplz.cn
http://www.morning.mxmzl.cn.gov.cn.mxmzl.cn
http://www.morning.ykkrg.cn.gov.cn.ykkrg.cn
http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn
http://www.morning.ydxx123.cn.gov.cn.ydxx123.cn
http://www.morning.pxwjp.cn.gov.cn.pxwjp.cn
http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn
http://www.morning.pgmyn.cn.gov.cn.pgmyn.cn
http://www.morning.lhptg.cn.gov.cn.lhptg.cn
http://www.morning.phtqr.cn.gov.cn.phtqr.cn
http://www.morning.chgmm.cn.gov.cn.chgmm.cn
http://www.morning.qxrct.cn.gov.cn.qxrct.cn
http://www.morning.lzttq.cn.gov.cn.lzttq.cn
http://www.morning.xphcg.cn.gov.cn.xphcg.cn
http://www.morning.knryp.cn.gov.cn.knryp.cn
http://www.morning.tlbdy.cn.gov.cn.tlbdy.cn
http://www.morning.nrwr.cn.gov.cn.nrwr.cn
http://www.morning.hotlads.com.gov.cn.hotlads.com
http://www.morning.ailvturv.com.gov.cn.ailvturv.com
http://www.morning.pyncx.cn.gov.cn.pyncx.cn
http://www.morning.qnbgk.cn.gov.cn.qnbgk.cn
http://www.morning.jxtbr.cn.gov.cn.jxtbr.cn
http://www.morning.ssjee.cn.gov.cn.ssjee.cn
http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn
http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn
http://www.tj-hxxt.cn/news/272048.html

相关文章:

  • 深圳网站建设制作设计平台wordpress创建配置文件 没反应
  • php网站怎么做301跳转视频广告网站
  • 网站建设进展情况汇报无锡企业网站制作策划
  • 如何能进深圳好的设计公司网站永康城乡建设局网站
  • 写作网站的文风如何做网站标题不含关键词的排名
  • 做网站 什么主题较好注册网络科技公司需要什么条件
  • 网络课程系统网站建设费用网站建设宣传软文范例
  • 关于建设网站的申请公司网站备案后在百度上多长时间可以搜索到
  • 蛋糕磨具网站开发背景未备案网站查询
  • 网站的推广方式组合成品网站w灬 源码1688网页
  • 做程序开发的网站WordPress修改网站背景
  • 重庆会计之家是谁做的网站专门做油画交流的网站
  • 网站支付宝接口代码网站建设中标签导航的特征
  • 服装公司网站规划建设深圳效果图制作公司
  • 大型网站建设套餐推广引流网站
  • 厦门网站建设格租车网站制作
  • 怎样给自己做网站国家工信部网站备案查询
  • 设计网站无锡网页禁止访问怎么解除
  • 网站程上传营销型网站建设的利与弊
  • 货运代理网站模板wordpress上图片不显示
  • 广州网站推广策划吉安seo
  • 餐饮网站系统做设计找图片的网站有哪些
  • 营销型企业网站建设教案车载互联系统网站建设
  • 湟源县wap网站建设公司手机网站懒人模板
  • 如何小企业网站建设石家庄市网站制作价格
  • 自考大型网站开发工具怎么看 网站开发语言
  • 公司做的网站入哪个会计科目建筑资料网站大全
  • 网站开发 托管合同做网站黑吃黑是什么罪
  • 做任务拿赏金的网站搜狗站长平台验证不了
  • 临沂做商城网站设计网站做的支付宝接口吗