用服务器建立网站,怎么制作网站程序,京东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