上一篇文章完成了部门管理的操作,这一文章主要实现员工的操作
下面开始
员工管理
分页查询
思路
开发
-
pojo实体类
-
package com.testpeople.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;//数据列表 }
-
Controller层
-
@Autowired private EmpService empService; @GetMapping("/emps") public Result page(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer pageSize){ //可以用@RequestParam注解来设置默认参数参数 //page 默认为1 //pageSize默认为10 // if (page==null) page=1; // if (pageSize==null) pageSize=10; log.info("page:{},pageSize:{}",page,pageSize); //调用Service分页查询 PageBean pageBean = empService.page(page,pageSize); return Result.success(pageBean); }
-
Service层
-
@Autowired private EmpMapper empMapper; /** * 实现分页 */ @Override public PageBean page(Integer page, Integer pageSize) { // 查询总记录数 Long total =empMapper.count(); // 查询当前页数据 List<Emp> rows = empMapper.page((page-1)*pageSize, pageSize); return new PageBean(total,rows); }
-
Mapper层
-
/** * 查询总记录数 * @return 记录数 */ @Select("select count(*) from emp") public Long count(); /** * 查询员工每页记录数 */ @Select("select * from emp limit #{start},#{rows}") public List<Emp> page(Integer start,Integer rows);
测试
-
Postman
-
-
前后端联调
-
tips
-
通过注解设置默认参数
-
@RequestParam(defaultCalue = "1")//设置请求参数默认值
-
通过PageHelper插件实现分页查询
-
pom依赖
-
<!-- pagehelper插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency>
-
修改位置
-
Service层
-
public PageBean page(Integer page, Integer pageSize) { //通过插件的方式实现 //1.设置分页参数 PageHelper.startPage(page,pageSize); //2.执行查询操作 List<Emp> empList = empMapper.page(); //3.强制转化 Page<Emp> p = (Page<Emp>)empList; return new PageBean(p.getTotal(),p.getResult()); }
-
Mapper层
-
/** * 使用pagehelper插件实现 * 员工信息查询 */ @Select("select * from emp") public List<Emp> page();
-
效果
-
后端
-
-
-
-
-
前端
-
同上文
-
分页查询(条件)
思路
开发
-
Controller层
-
@Autowired private EmpService empService; @GetMapping("/emps") public 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){ //可以用@RequestParam注解来设置默认参数参数 //page 默认为1 //pageSize默认为10 // if (page==null) page=1; // if (pageSize==null) pageSize=10; log.info("page:{},pageSize:{},name:{},gender:{},begin:{},end:{}",page,pageSize,name,gender,begin,end); //调用Service分页查询 PageBean pageBean = empService.page(page,pageSize,name,gender,begin,end); return Result.success(pageBean); }
-
Service层
-
public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) { //通过插件的方式实现 //1.设置分页参数 PageHelper.startPage(page,pageSize); //2.执行查询操作 List<Emp> empList = empMapper.page(name, gender, begin, end); //3.强制转化 Page<Emp> p = (Page<Emp>)empList; return new PageBean(p.getTotal(),p.getResult()); }
-
Mapper层
-
//使用XML形式 public List<Emp> page(String name, Short gender, LocalDate begin, LocalDate end);
-
<select id="page" resultType="com.testpeople.pojo.Emp"> select * from emp <where> <if test="name!=null and name!=''"> name like concat('%',#{name},'%') </if> <if test="gender!=null"> and gender = #{gender} </if> <if test="begin!=null"> and entrydate between #{begin} and #{end} </if> <if test="end!=null"> and entrydate between #{begin} and #{end} </if> </where> </select>
测试
-
Postman
-
-
前后端联调
-
删除员工
思路
开发
-
Controller层
-
/** * 删除功能 */ @DeleteMapping("/{ids}") public Result delete(@PathVariable List<Integer> ids){ log.info("delete emp:{}",ids); empService.delete(ids); return Result.success(); }
-
Service层
-
/** * 批量删除 */ @Override public void delete(List<Integer> ids) { empMapper.delete(ids); }
-
Mapper层
-
/** * 删除员工 * @param ids */ void delete(List<Integer> ids);
-
<!-- 批量删除--> <delete id="delete"> delete from emp where id in <foreach collection="ids" item="id" open="(" close=")" separator=","> #{id} </foreach> </delete>
测试
-
postman
-
-
前后端联调
-
新增员工(暂时不上传头像)
思路
开发
- Controller层
-
/** *新增员工 */ @PostMapping public Result save(@RequestBody Emp emp){ log.info("save emp:{}",emp); empService.save(emp); return Result.success(); }
- Service层
-
//新增员工 @Override public void save(Emp emp) { //完善插入信息 emp.setCreateTime(LocalDateTime.now()); emp.setUpdateTime(LocalDateTime.now()); empMapper.insert(emp); }
- Mapper层
-
/** * 添加员工 * @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);
测试
-
postman
-
-
前后端联调
-
文件上传
设置上传限制(位于application.properties中)
#配置单个文件上传大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求文件最大上传数量
spring.servlet.multipart.max-request-size=100MB
本地存储
-
Controller层
-
//本地存储 package com.testpeople.controller; import com.testpeople.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; @RestController @Slf4j public class LoadController { @PostMapping("/upload") public Result upload(String username, String password, MultipartFile file) throws IOException { log.info("文件上传:{},{},{}",username,password,file); // 1.将文件保存到本地 //通过UUid生成文件名 String fileName = UUID.randomUUID().toString() + file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".")); //存放路径 String path = "E:\\javaProject\\admin_web_project\\testpeople-management\\src\\main\\resources\\files\\"; //保存文件 file.transferTo(new File(path+ fileName)); return Result.success(); } }
-
效果
-
postman
-
-
-
后端
-
完善新增员工操作
-
工具类(文件上传)
-
package com.testpeople.utils; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.UUID; @Component public class FilesShow { //将文件上传到本地 public String upload(MultipartFile file) throws IOException { //获取文件的输入流 InputStream inputStream = file.getInputStream(); //获取文件名并存储 //通过UUid生成文件名 String fileName = UUID.randomUUID().toString() + file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".")); //存放路径 String path = "E:\\javaProject\\admin_web_project\\testpeople-management\\src\\main\\resources\\files\\"; //保存文件 file.transferTo(new File(path+ fileName)); //存储文件路径 return path+ fileName; } }
-
controller层
-
/** * 实现上传文件功能,本地存储 * @param file * @return * @throws IOException */ @PostMapping("/upload") public Result upload(@RequestParam("image") MultipartFile file) throws IOException { //日志 log.info("文件上传:{}",file); //实现文件上传 String url = filesShow.upload(file); //上传完成日志 log.info("文件上传完成 url为{}",url); return Result.success(url); }
-
效果
-
-
前端
-
测试版
修改员工
查询回调
思路
开发
-
Controller层
-
/** * 根据id查询员工 */ @GetMapping("/{id}") public Result getById(@PathVariable Integer id){ //日志 log.info("根据ID查询人员 id:{}",id); Emp emp = empService.geyById(id); return Result.success(emp); }
-
Service层
-
/** * 根据ID 查询员工 * @param id * @return */ @Override public Emp geyById(Integer id) { return empMapper.getById(id); }
-
Mapper层
-
/** * 根据id查询员工 * @param id * @return */ @Select("select * from emp where id = #{id}") Emp getById(Integer id);
测试
-
postman
-
-
前后端联调
-
修改
思路
开发
-
Controller层
-
/** * 修改员工 * @param emp * @return */ @PutMapping public Result update(@RequestBody Emp emp){ //记录日志 log.info("更新人员:{}",emp.toString()); empService.update(emp); return Result.success(); }
-
Service层
-
/** * 更新员工 * @param emp */ @Override public void update(Emp emp) { emp.setUpdateTime(LocalDateTime.now()); empMapper.update(emp); }
-
Mapper层
/**
* 修改员工
* @param emp
*/
void update(Emp emp);
-
<!-- 修改员工功能--> <update id="update"> update emp <set> <if test="username!=null and username != '' "> username = #{username}, </if> <if test="password!=null and password != '' "> password = #{password}, </if> <if test="name!=null and name != '' "> name = #{name}, </if> <if test="gender!=null"> gender = #{gender}, </if> <if test="image!=null and image != '' "> image = #{image}, </if> <if test="job!=null"> job = #{job}, </if> <if test="entrydate!=null"> entrydate = #{entrydate}, </if> <if test="deptId!=null"> dept_id = #{deptId}, </if> <if test="updateTime!=null"> update_time = #{updateTime} </if> </set> where id = #{id}; </update>
测试
-
Postman
-
-
前后端联调
-
配置文件
Properties
# application.properties
spring.application.name=testpeople-management
#mybatis?????
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/testpeople?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTime
spring.datasource.username=root
spring.datasource.password=123456
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis.configuration.map-underscore-to-camel-case=true
#??????????
spring.servlet.multipart.max-file-size=100MB
#??????????????
spring.servlet.multipart.max-request-size=1000MB
-
在配置文件中配置变量的可以通过@Value属性进行注入。
三种配置文件对比
Yml
-
语法介绍
-
-
数据类型
-
对象/Map集合
-
#定义对象/Map集合 uer: name: 张三 age: 18 sex: 男
-
-
数组/List/Set集合
-
#定义数组/List集合 list: - 张三 - 李四 - java - springboot
-
使用(替换application.properties)
-
#端口号 server: port: 8080 # ##定义对象/Map集合 #uer: # name: 张三 # age: 18 # sex: 男 # # ##定义数组/List集合 # list: # - 张三 # - 李四 # - java # - springboot spring: application: name: testpeople-mannagement servlet: multipart: max-file-size: 100MB max-request-size: 1000MB datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/testpeople?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTime username: root password: 123456 #mybatis配置 mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true
@ConfigurationProperties
-
-
解决警告
-
用于识别上述注解的依赖
-
-
-
与@Value注解的对比
主要介绍了员工管理的实现
介绍并实现了文件上传到本地的功能实现(阿里云oss由于设计隐私,所以并没有编辑)
介绍几种配置文件
以上知识,来自小编学习黑马程序员的课程。
以下是项目链接