Java后端tlias员工部门管理-员工管理上-MyBatis-3

那么部门管理完成之后,接下来要对员工进行管理了。要想看部门管理,可以看下上一小节

Java后端tlias员工部门管理-部门管理-2-CSDN博客

员工管理一样的,要完成这个三层架构

首先来说明一下,我么Javaweb后端是三层架构的,分为controller、service、mapper层 ,

  1. controller层是直接对前端工程或者是操作浏览器的
  2. service是业务逻辑层,
  3. mapper是直接操作数据库的

整个的大致流程是mapper拿到从数据库读取的数据,交还给service,service对其数据进行业务逻辑处理之后,交给controller,controller拿到之后,把响应结果返回给前端

 分页查询员工数据

首先我们要想展示在前端,那么前端要给后端传当前页码page和每页展示记录数pageSize。那么后端根据前端传过来的两个数据,后端要从数据库查询所有数据,并且分页展示,还有一个总记录数。这时候返回的数据是不一样的类型,一个是列表,一个是整型,这时候要怎么搞呢?

一般情况下是封装成一个实体类,有这两个属性,并返回。

所以得现在pojo层定义一个pageBean对象类

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; //数据列表
}

 total可能会有点长,所以用Long这个类型。并且这三个注解分别代表

  1. @Data  相当于getter和setter
  2. @NoArgsConstructor   无参构造
  3. @AllArgsConstructor    全参构造

接下来就要编写查询语句了。可以借助插件pageHelper去使用来简化代码

它是接收当前的页码和每页应展示的数据量,然后可以自动的查询 出来。

EmpMapper的代码就是

List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);

有人会问,怎么跟图片不一样(本来就是不一样~~哈哈)因为你既然要分页查询,那么你之后可能在分页查询的时候会带上参数,如下图,会有姓名是什么,性别是什么,入职时间的开始时间和结束时间是多少。这时候你写查询语句就困难了,需要在xml文件编写动态的SQL语句。

这时候需要用到MyBatis了。 

首先在你的pom.xml文件查看dependency是否有这三个个配置

<dependency>
     <groupId>org.mybatis.spring.boot</groupId>
     <artifactId>mybatis-spring-boot-starter</artifactId>
     <version>3.0.3</version>
</dependency>
<dependency>
      <groupId>org.dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>2.1.3</version>
</dependency>

<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.4.6</version>
</dependency>

第一个是mybatis的插件配置,我们在创建项目的时候就已经勾选好了,详情见 http://t.csdnimg.cn/5TQxE

第二个是解析XML文件的配置,第三个是pageHelper插件的配置

然后建立如下的文件夹。我们之后在EmpMapper.xml里面编写复制SQL语句

那么里面的复杂代码是

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">
    <sql id="commentSelect">
        select id,username,password,name,gender,image,job,entrydate,create_time,update_time from emp
    </sql>
    <select id="list" resultType="com.itheima.pojo.Emp">
        <include refid="commentSelect"/>
        <where>
            <if test="name != null">
                name like concat('%',#{name},'%')
            </if>
            <if test="gender != null">
                and gender=#{gender}
            </if>
            <if test="begin != null and end != null">
                and (entrydate between #{begin} and #{end})
            </if>
        </where>
        order by update_time desc
    </select>
</mapper>

 <mapper>标签中的namespace指定你的Dao层的EmpMapper在哪,<sql>标签表示公共的查询语句,用id来区别标识,<include>是你要用到这个共同的SQL语句就可以用refid来指定

注意了!<select id="list" resultType="com.itheima.pojo.Emp">在这里面,id是你Dao层的Mapper里的方法名,resultType是你要查询之后得到的具体的实体类

之后就可以编写service层的代码了

EmpService

PageBean page(Integer page,Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);

EmpServiceImpl

package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.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 {
    @Autowired
    private EmpMapper empMapper;

    @Override
    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.list(name,gender,begin,end);
        Page<Emp> p = (Page<Emp>) empList;
        //3.封装成pageBean对象
        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
        return pageBean;
    }
}

Controller层的EmpController

package com.itheima.controller;

import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.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;
@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {
    @Autowired
    private EmpService empService;

    @GetMapping
    //@RequestParam指定默认值,而不用写if(page == null) page=1;
    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){
        log.info("分页查询员工,{},{}",page,pageSize);
        PageBean pageBean = empService.page(page,pageSize,name,gender,begin,end);
        return Result.success(pageBean);
    }
}

@RequestParam就是前端没指定传入的值时,默认是1,@DateTimeFormat是用于指定日期的格式。

然后启动程序,编写接口测试,如下图,在Params传入查询参数

可以发现请求响应数据成功,那么员工的分页查询就正式完成了。 

 


 由于我白天忙着学习,凌晨才赶着出稿,但是发现分页查询是个重点,所以只写了员工管理的分页查询,但是只要解决了分页查询,后面就跟部门管理的三层写法一样简单。

抱歉了大家,后面的员工管理还有员工与部门结合的管理我会更新完的请大家放心!!点个赞、关注、收藏再走吧,有问题评论区随时提问!

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值