3. 員工管理
完成了部門管理的功能開發(fā)之后,我們進(jìn)入到下一環(huán)節(jié)員工管理功能的開發(fā)。
基于以上原型,我們可以把員工管理功能分為:
-
分頁查詢(今天完成)
-
帶條件的分頁查詢(今天完成)
-
刪除員工(今天完成)
-
新增員工(后續(xù)完成)
-
修改員工(后續(xù)完成)
那下面我們就先從分頁查詢功能開始學(xué)習(xí)。
3.1 分頁查詢
3.1.1 基礎(chǔ)分頁
3.1.1.1 需求分析
我們之前做的查詢功能,是將數(shù)據(jù)庫中所有的數(shù)據(jù)查詢出來并展示到頁面上,試想如果數(shù)據(jù)庫中的數(shù)據(jù)有很多(假設(shè)有十幾萬條)的時(shí)候,將數(shù)據(jù)全部展示出來肯定不現(xiàn)實(shí),那如何解決這個(gè)問題呢?
使用分頁解決這個(gè)問題。每次只展示一頁的數(shù)據(jù),比如:一頁展示10條數(shù)據(jù),如果還想看其他的數(shù)據(jù),可以通過點(diǎn)擊頁碼進(jìn)行查詢。
要想從數(shù)據(jù)庫中進(jìn)行分頁查詢,我們要使用LIMIT
關(guān)鍵字,格式為:limit 開始索引 每頁顯示的條數(shù)
查詢第1頁數(shù)據(jù)的SQL語句是:
select * from emp limit 0,10;查詢第2頁數(shù)據(jù)的SQL語句是:
select * from emp limit 10,10;查詢第3頁的數(shù)據(jù)的SQL語句是:
select * from emp limit 20,10;觀察以上SQL語句,發(fā)現(xiàn): 開始索引一直在改變 , 每頁顯示條數(shù)是固定的
開始索引的計(jì)算公式: 開始索引 = (當(dāng)前頁碼 - 1) * 每頁顯示條數(shù)
我們繼續(xù)基于頁面原型,繼續(xù)分析,得出以下結(jié)論:
-
前端在請(qǐng)求服務(wù)端時(shí),傳遞的參數(shù)
-
當(dāng)前頁碼 page
-
每頁顯示條數(shù) pageSize
-
-
后端需要響應(yīng)什么數(shù)據(jù)給前端
-
所查詢到的數(shù)據(jù)列表(存儲(chǔ)到List 集合中)
-
總記錄數(shù)
-
-
后臺(tái)給前端返回的數(shù)據(jù)包含:List集合(數(shù)據(jù)列表)、total(總記錄數(shù))
而這兩部分我們通常封裝到PageBean對(duì)象中,并將該對(duì)象轉(zhuǎn)換為json格式的數(shù)據(jù)響應(yīng)回給瀏覽器。
@Data @NoArgsConstructor @AllArgsConstructor public class PageBean { private Long total; //總記錄數(shù) private List rows; //當(dāng)前頁數(shù)據(jù)列表 }
3.1.1.2 接口文檔
員工列表查詢
-
基本信息
請(qǐng)求路徑:/emps ? 請(qǐng)求方式:GET ? 接口描述:該接口用于員工列表數(shù)據(jù)的條件分頁查詢
-
請(qǐng)求參數(shù)
參數(shù)格式:queryString
參數(shù)說明:
參數(shù)名稱 是否必須 示例 備注 name 否 張 姓名 gender 否 1 性別 , 1 男 , 2 女 begin 否 2010-01-01 范圍匹配的開始時(shí)間(入職日期) end 否 2020-01-01 范圍匹配的結(jié)束時(shí)間(入職日期) page 是 1 分頁查詢的頁碼,如果未指定,默認(rèn)為1 pageSize 是 10 分頁查詢的每頁記錄數(shù),如果未指定,默認(rèn)為10 請(qǐng)求數(shù)據(jù)樣例:
/emps?name=張&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10
-
響應(yīng)數(shù)據(jù)
參數(shù)格式:application/json
參數(shù)說明:
名稱 類型 是否必須 默認(rèn)值 備注 其他信息 code number 必須 響應(yīng)碼, 1 成功 , 0 失敗 msg string 非必須 提示信息 data object 必須 返回的數(shù)據(jù) |- total number 必須 總記錄數(shù) |- rows object [] 必須 數(shù)據(jù)列表 item 類型: object |- id number 非必須 id |- username string 非必須 用戶名 |- name string 非必須 姓名 |- password string 非必須 密碼 |- entrydate string 非必須 入職日期 |- gender number 非必須 性別 , 1 男 ; 2 女 |- image string 非必須 圖像 |- job number 非必須 職位, 說明: 1 班主任,2 講師, 3 學(xué)工主管, 4 教研主管, 5 咨詢師 |- deptId number 非必須 部門id |- createTime string 非必須 創(chuàng)建時(shí)間 |- updateTime string 非必須 更新時(shí)間 響應(yīng)數(shù)據(jù)樣例:
{ ?"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" ? ? } ? ] } }
3.1.1.3 思路分析
分頁查詢需要的數(shù)據(jù),封裝在PageBean對(duì)象中:
3.1.1.4 功能開發(fā)
通過查看接口文檔:員工列表查詢
請(qǐng)求路徑:/emps
請(qǐng)求方式:GET
請(qǐng)求參數(shù):跟隨在請(qǐng)求路徑后的參數(shù)字符串。 例:/emps?page=1&pageSize=10
響應(yīng)數(shù)據(jù):json格式
EmpController
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.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;
?
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
?
? ?@Autowired
? ?private EmpService empService;
?
? ?//條件分頁查詢
? ?@GetMapping
? ?public Result page(@RequestParam(defaultValue = "1") Integer page,
? ? ? ? ? ? ? ? ? ? ? @RequestParam(defaultValue = "10") Integer pageSize) {
? ? ? ?//記錄日志
? ? ? ?log.info("分頁查詢,參數(shù):{},{}", page, pageSize);
? ? ? ?//調(diào)用業(yè)務(wù)層分頁查詢功能
? ? ? ?PageBean pageBean = empService.page(page, pageSize);
? ? ? ?//響應(yīng)
? ? ? ?return Result.success(pageBean);
? }
}
@RequestParam(defaultValue="默認(rèn)值") //設(shè)置請(qǐng)求參數(shù)默認(rèn)值
EmpService
public interface EmpService {
? ?/**
? ? * 條件分頁查詢
? ? * @param page 頁碼
? ? * @param pageSize 每頁展示記錄數(shù)
? ? * @return
? ? */
? ?PageBean page(Integer page, Integer pageSize);
}
EmpServiceImpl
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.List;
?
@Slf4j
@Service
public class EmpServiceImpl implements EmpService {
? ?@Autowired
? ?private EmpMapper empMapper;
?
? ?@Override
? ?public PageBean page(Integer page, Integer pageSize) {
? ? ? ?//1、獲取總記錄數(shù)
? ? ? ?Long count = empMapper.count();
?
? ? ? ?//2、獲取分頁查詢結(jié)果列表
? ? ? ?Integer start = (page - 1) * pageSize; //計(jì)算起始索引 , 公式: (頁碼-1)*頁大小
? ? ? ?List<Emp> empList = empMapper.list(start, pageSize);
?
? ? ? ?//3、封裝PageBean對(duì)象
? ? ? ?PageBean pageBean = new PageBean(count , empList);
? ? ? ?return pageBean;
? }
}
EmpMapper
@Mapper
public interface EmpMapper {
? ?//獲取總記錄數(shù)
? ?@Select("select count(*) from emp")
? ?public Long count();
?
? ?//獲取當(dāng)前頁的結(jié)果列表
? ?@Select("select * from emp limit #{start}, #{pageSize}")
? ?public List<Emp> list(Integer start, Integer pageSize);
}
3.1.1.5 功能測(cè)試
功能開發(fā)完成后,重新啟動(dòng)項(xiàng)目,使用postman,發(fā)起POST請(qǐng)求:
3.1.1.6 前后端聯(lián)調(diào)
打開瀏覽器,測(cè)試后端功能接口:文章來源:http://www.zghlxwxcb.cn/news/detail-791848.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-791848.html
到了這里,關(guān)于Javaweb之SpringBootWeb案例員工管理分頁查詢的詳細(xì)解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!