您好,登錄后才能下訂單哦!
本篇內容介紹了“Java員工信息管理功能怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
當系統中的用戶越來越多頁面展示不完整,我們需要通過實現分頁的方式去展示員工的信息:
在開發代碼之前,需要理清楚程序的執行過程與業務邏輯:
頁面發送Ajax請求,將分頁查詢參數(page,pagesize,name)提交到服務端服務端
Controller接收頁面提交的數據并調用查詢的數據
Service調用Mapper操作數據庫,查詢分頁數據
Controller將查詢到的分頁數據響應到頁面
頁面接收到分頁的數據并通過ElementUI的Table組件展示到頁面上
其實頁面的分頁參數是通過JSON的格式傳值后端,但是為何是圖中是以這種問號的方式拼接的呢,原因是前端將請求進行一個攔截后重新拼接后的結果(前端代碼不再敘述)。
配置分頁插件
package com.itheima.reggie.config; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 配置Mybatis-plus分頁插件 * @author jektong * @date 2022年05月01日 0:08 */ @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return mybatisPlusInterceptor; } }
Controller層
/** * 員工信息分頁查詢 * * @param page 當前頁 * @param pageSize 頁碼 * @param name 關鍵字查詢 * @return */ @GetMapping("/page") public R<Page> page(int page, int pageSize, String name) { log.info("page={},pageSize={},name={}", page, pageSize, name); // 構造分頁構造器 Page pageInfo = new Page(page, pageSize); // 構造條件 LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper(); queryWrapper.like(StringUtils.isNotEmpty(name), Employee::getName, name).or() .like(StringUtils.isNotEmpty(name),Employee::getUsername,name); // 添加排序 queryWrapper.orderByDesc(Employee::getUpdateTime); // 執行查詢 employeeService.page(pageInfo, queryWrapper); return R.success(pageInfo); }
員工管理列表頁,可以對某個員工狀態進行啟用或者禁用的操作。賬號禁用的與員工不可登錄系統,啟用過后可以正常登錄。這一操作只允許管理員進行操作。
頁面中是如何做到只有管理員admin可以看到禁用按鈕的,其實在前端只需獲取到登錄的賬號,然后進行一個用戶名判斷即可:
頁面初始化的時候就獲取登錄賬號:
created() { this.init() this.user = JSON.parse(localStorage.getItem('userInfo')).username },
顯示賬號狀態的那一列:
<el-table-column label="賬號狀態"> <template slot-scope="scope"> {{ String(scope.row.status) === '0' ? '已禁用' : '正常' }} </template> </el-table-column>
向后端傳遞JSON的數據,將需要禁用員工的賬號的ID與狀態傳值后端,前端主要代碼:
//狀態修改 statusHandle (row) { this.id = row.id this.status = row.status this.$confirm('確認調整該賬號的狀態?', '提示', { 'confirmButtonText': '確定', 'cancelButtonText': '取消', 'type': 'warning' }).then(() => { enableOrDisableEmployee({ 'id': this.id, 'status': !this.status ? 1 : 0 }).then(res => { console.log('enableOrDisableEmployee',res) if (String(res.code) === '1') { this.$message.success('賬號狀態更改成功!') this.handleQuery() } }).catch(err => { this.$message.error('請求出錯了:' + err) }) }) },
/** * 根據用戶ID去修改用戶狀態 * @param request * @param employee * @return */ @PostMapping public R<String> update(HttpServletRequest request, @RequestBody Employee employee){ // 獲取員工ID Long empId = (Long) request.getSession().getAttribute("employee"); employee.setUpdateTime(LocalDateTime.now()); employee.setUpdateUser(empId); employeeService.updateById(employee); return R.success("員工信息修改成功"); }
其實測試發現這段代碼是不會被修改成功的,因為涉及一個JS的精度問題,JS識別Long類型只精確到16位,而ID是雪花算法生成的ID有19位,導致ID精度丟失。
如何解決上述問題,將頁面的Long類型轉為字符串。具體步驟:
使用JacksonObjectMapper對JSON數據進行轉換
在WebConfig配置類中擴展SringMVC的消息轉換器,鏡像Java對象到JSON數據的轉換
JacksonObjectMapper:
package com.itheima.reggie.common; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; import org.springframework.stereotype.Component; import java.math.BigInteger; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; /** * 對象映射器:基于jackson將Java對象轉為json,或者將json轉為Java對象 * 將JSON解析為Java對象的過程稱為 [從JSON反序列化Java對象] * 從Java對象生成JSON的過程稱為 [序列化Java對象到JSON] */ @Component public class JacksonObjectMapper extends ObjectMapper { public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; public JacksonObjectMapper() { super(); //收到未知屬性時不報異常 this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false); //反序列化時,屬性不存在的兼容處理 this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); SimpleModule simpleModule = new SimpleModule() .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))) .addSerializer(BigInteger.class, ToStringSerializer.instance) .addSerializer(Long.class, ToStringSerializer.instance) .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); //注冊功能模塊 例如,可以添加自定義序列化器和反序列化器 this.registerModule(simpleModule); } }
WebMVCConfig:
/** * 擴展MVC消息轉換器 * @param converters */ @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { log.info("擴展消息轉換器"); // 創建消息轉換器 MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); // 設置對象轉換器,底層使用Jackson將Java對象轉為json messageConverter.setObjectMapper(new JacksonObjectMapper()); // 將上面的消息轉換器對象追加到MVC框架的轉換器集合中 converters.add(0,messageConverter); }
修復之后員工狀態可以正常修改,ID也改變為字符串格式了:
“Java員工信息管理功能怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。