欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java精品項(xiàng)目瑞吉外賣(mài)之員工信息管理篇

 更新時(shí)間:2022年05月13日 09:50:32   作者:爪哇斗羅  
這篇文章主要為大家詳細(xì)介紹了java精品項(xiàng)目-瑞吉外賣(mài)訂餐系統(tǒng),此項(xiàng)目過(guò)大,分為多章獨(dú)立講解,本篇內(nèi)容為員工信息分頁(yè)查詢與啟用或禁用員工狀態(tài),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

上一篇:

瑞吉外賣(mài)項(xiàng)目:新增員工

一. 員工信息分頁(yè)查詢

1. 需求分析

當(dāng)系統(tǒng)中的用戶越來(lái)越多頁(yè)面展示不完整,我們需要通過(guò)實(shí)現(xiàn)分頁(yè)的方式去展示員工的信息:

2. 代碼開(kāi)發(fā)

在開(kāi)發(fā)代碼之前,需要理清楚程序的執(zhí)行過(guò)程與業(yè)務(wù)邏輯:

  • 頁(yè)面發(fā)送Ajax請(qǐng)求,將分頁(yè)查詢參數(shù)(page,pagesize,name)提交到服務(wù)端服務(wù)端
  • Controller接收頁(yè)面提交的數(shù)據(jù)并調(diào)用查詢的數(shù)據(jù)
  • Service調(diào)用Mapper操作數(shù)據(jù)庫(kù),查詢分頁(yè)數(shù)據(jù)
  • Controller將查詢到的分頁(yè)數(shù)據(jù)響應(yīng)到頁(yè)面
  • 頁(yè)面接收到分頁(yè)的數(shù)據(jù)并通過(guò)ElementUI的Table組件展示到頁(yè)面上

其實(shí)頁(yè)面的分頁(yè)參數(shù)是通過(guò)JSON的格式傳值后端,但是為何是圖中是以這種問(wèn)號(hào)的方式拼接的呢,原因是前端將請(qǐng)求進(jìn)行一個(gè)攔截后重新拼接后的結(jié)果(前端代碼不再敘述)。

配置分頁(yè)插件

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分頁(yè)插件
 * @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層

   /**
     * 員工信息分頁(yè)查詢
     *
     * @param page 當(dāng)前頁(yè)
     * @param pageSize 頁(yè)碼
     * @param name 關(guān)鍵字查詢
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(int page, int pageSize, String name) {
        log.info("page={},pageSize={},name={}", page, pageSize, name);
        // 構(gòu)造分頁(yè)構(gòu)造器
        Page pageInfo = new Page(page, pageSize);
        // 構(gòu)造條件
        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);
        // 執(zhí)行查詢
        employeeService.page(pageInfo, queryWrapper);
        return R.success(pageInfo);
    }

二. 啟用或禁用員工狀態(tài)

1 需求分析

員工管理列表頁(yè),可以對(duì)某個(gè)員工狀態(tài)進(jìn)行啟用或者禁用的操作。賬號(hào)禁用的與員工不可登錄系統(tǒng),啟用過(guò)后可以正常登錄。這一操作只允許管理員進(jìn)行操作。

2 代碼開(kāi)發(fā)

前端核心代碼

頁(yè)面中是如何做到只有管理員admin可以看到禁用按鈕的,其實(shí)在前端只需獲取到登錄的賬號(hào),然后進(jìn)行一個(gè)用戶名判斷即可:

頁(yè)面初始化的時(shí)候就獲取登錄賬號(hào):

created() {
          this.init()
          this.user = JSON.parse(localStorage.getItem('userInfo')).username
        },

顯示賬號(hào)狀態(tài)的那一列:

<el-table-column label="賬號(hào)狀態(tài)">
    <template slot-scope="scope">
        {{ String(scope.row.status) === '0' ? '已禁用' : '正常' }}
    </template>
</el-table-column>

向后端傳遞JSON的數(shù)據(jù),將需要禁用員工的賬號(hào)的ID與狀態(tài)傳值后端,前端主要代碼:

//狀態(tài)修改
statusHandle (row) {
	this.id = row.id
	this.status = row.status
	this.$confirm('確認(rèn)調(diào)整該賬號(hào)的狀態(tài)?', '提示', {
		'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('賬號(hào)狀態(tài)更改成功!')
				this.handleQuery()
			}
		}).catch(err => {
			this.$message.error('請(qǐng)求出錯(cuò)了:' + err)
		})
	})
},

后端核心代碼

/**
 * 根據(jù)用戶ID去修改用戶狀態(tài)
 *  @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("員工信息修改成功");
}

其實(shí)測(cè)試發(fā)現(xiàn)這段代碼是不會(huì)被修改成功的,因?yàn)樯婕耙粋€(gè)JS的精度問(wèn)題,JS識(shí)別Long類型只精確到16位,而ID是雪花算法生成的ID有19位,導(dǎo)致ID精度丟失。

代碼修復(fù)

如何解決上述問(wèn)題,將頁(yè)面的Long類型轉(zhuǎn)為字符串。具體步驟:

  • 使用JacksonObjectMapper對(duì)JSON數(shù)據(jù)進(jìn)行轉(zhuǎn)換
  • 在WebConfig配置類中擴(kuò)展SringMVC的消息轉(zhuǎn)換器,鏡像Java對(duì)象到JSON數(shù)據(jù)的轉(zhuǎn)換

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;
/**
 * 對(duì)象映射器:基于jackson將Java對(duì)象轉(zhuǎn)為json,或者將json轉(zhuǎn)為Java對(duì)象
 * 將JSON解析為Java對(duì)象的過(guò)程稱為 [從JSON反序列化Java對(duì)象]
 * 從Java對(duì)象生成JSON的過(guò)程稱為 [序列化Java對(duì)象到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();
        //收到未知屬性時(shí)不報(bào)異常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
        //反序列化時(shí),屬性不存在的兼容處理
        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)));
        //注冊(cè)功能模塊 例如,可以添加自定義序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

WebMVCConfig:

/**
     * 擴(kuò)展MVC消息轉(zhuǎn)換器
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("擴(kuò)展消息轉(zhuǎn)換器");
        // 創(chuàng)建消息轉(zhuǎn)換器
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        // 設(shè)置對(duì)象轉(zhuǎn)換器,底層使用Jackson將Java對(duì)象轉(zhuǎn)為json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        // 將上面的消息轉(zhuǎn)換器對(duì)象追加到MVC框架的轉(zhuǎn)換器集合中
        converters.add(0,messageConverter);
    }

修復(fù)之后員工狀態(tài)可以正常修改,ID也改變?yōu)樽址袷搅耍?/p>

到此這篇關(guān)于Java精品項(xiàng)目瑞吉外賣(mài)之員工信息管理篇的文章就介紹到這了,更多相關(guān)Java員工信息管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java tomcat環(huán)境變量及idea配置解析

    Java tomcat環(huán)境變量及idea配置解析

    這篇文章主要介紹了Java tomcat環(huán)境變量及idea配置解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • java screen的配置詳解及注意事項(xiàng)

    java screen的配置詳解及注意事項(xiàng)

    這篇文章主要介紹了java screen的配置詳解及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 解決使用ProcessBuilder踩到的坑及注意事項(xiàng)

    解決使用ProcessBuilder踩到的坑及注意事項(xiàng)

    這篇文章主要介紹了解決使用ProcessBuilder踩到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java?switch?case語(yǔ)句舉例詳解

    Java?switch?case語(yǔ)句舉例詳解

    這篇文章主要給大家介紹了關(guān)于Java?switch?case語(yǔ)句舉例詳解的相關(guān)資料,switch case語(yǔ)句是一種流程控制語(yǔ)句,用于根據(jù)不同的條件執(zhí)行不同的代碼塊,需要的朋友可以參考下
    2023-10-10
  • java中的反射及其優(yōu)點(diǎn)說(shuō)明

    java中的反射及其優(yōu)點(diǎn)說(shuō)明

    這篇文章主要介紹了java中的反射及其優(yōu)點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • mybatis中使用oracle關(guān)鍵字出錯(cuò)的解決方法

    mybatis中使用oracle關(guān)鍵字出錯(cuò)的解決方法

    這篇文章主要給大家介紹了關(guān)于mybatis中使用oracle關(guān)鍵字出錯(cuò)的解決方法,文中通過(guò)示例代碼將解決的方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-08-08
  • springboot中設(shè)置定時(shí)任務(wù)的三種方法小結(jié)

    springboot中設(shè)置定時(shí)任務(wù)的三種方法小結(jié)

    在我們開(kāi)發(fā)項(xiàng)目過(guò)程中,經(jīng)常需要定時(shí)任務(wù)來(lái)幫助我們來(lái)做一些內(nèi)容,本文介紹了springboot中設(shè)置定時(shí)任務(wù)的三種方法,主要包括@Scheduled注解,Quartz框架和xxl-job框架的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12
  • SpringBoot啟動(dòng)java.nio.charset.MalformedInputException: Input length = 1報(bào)錯(cuò)的解決方案

    SpringBoot啟動(dòng)java.nio.charset.MalformedInputException: I

    本文主要介紹了SpringBoot啟動(dòng)java.nio.charset.MalformedInputException: Input length = 1報(bào)錯(cuò)的解決方案
    2023-07-07
  • Java中Lambda表達(dá)式并行與組合行為

    Java中Lambda表達(dá)式并行與組合行為

    這篇文章主要介紹了Java中Lambda表達(dá)式并行與組合行為,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • 一文掌握MyBatis?Plus的條件構(gòu)造器方法

    一文掌握MyBatis?Plus的條件構(gòu)造器方法

    這篇文章主要介紹了MyBatis?Plus的條件構(gòu)造器,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02

最新評(píng)論