欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:java 蒼穹外賣day02

柚子快報邀請碼778899分享:java 蒼穹外賣day02

http://yzkb.51969.com/

員工管理,分類管理

新增員工

產(chǎn)品經(jīng)理需求分析

使用請求post去請求,按照json格式去提交,后端給前端返回result

Path: /admin/employee Method:post

請求的json就是包含上圖表單里面數(shù)據(jù) 返回的數(shù)據(jù)是后端給前端:

**在controller類里面增加方法,然后在service里面增加方法,再在impl里面實(shí)現(xiàn)方法(從DTO傳過來的參數(shù)賦值給new的employee,然后調(diào)用Mapper將數(shù)據(jù)記錄到數(shù)據(jù)庫之中)

其中的參數(shù)都是清一色的DTO(從前端接受的數(shù)據(jù))** 1、技巧 只用Spring的BeanUtils.copyProperties去拷貝類的屬性。 2. 設(shè)置常量類 Constant以便后期維護(hù),在set的時候都用常量屬性來set 3.返回Result.succes

@PostMapping

@ApiOperation("新增員工")

public Result save(@RequestBody EmployeeDTO employeeDTO){

System.out.println("當(dāng)前線程的id" + Thread.currentThread().getId());

log.info("新增員工:{}",employeeDTO);

employeeService.save(employeeDTO);

return Result.success();

}

也就是controller(return Result)- >service(只是定義一個方法名)- > impl(完成功能獲取employee的信息,轉(zhuǎn)到Mapper去執(zhí)行sql操作)- >Mapper(完成sql代碼)

public void save(EmployeeDTO employeeDTO){

Employee employee = new Employee();

//對象屬性拷貝 Spring封裝的

BeanUtils.copyProperties(employeeDTO,employee); //從前往后面拷貝

//設(shè)置賬號的狀態(tài)

employee.setStatus(StatusConstant.ENABLE); //就是寫了一個常量類

employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));

employee.setCreateTime(LocalDateTime.now());

employee.setUpdateTime(LocalDateTime.now());

//TODO 后期改成當(dāng)前登錄用戶的id 用戶名共同值了沒有異常處理

employee.setCreateUser(10L);

employee.setUpdateUser(10L);

employeeMapper.insert(employee); //專門的類去執(zhí)行sql語句的操作

}

解決用戶名重復(fù)的問題!寫異常處理類

@ExceptionHandler

public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){

獲取ex.getMessage的內(nèi)容,處理內(nèi)容使用split,返回的是Result.error(處理的文本數(shù)據(jù)表示獲得的異常)

解決創(chuàng)建人id問題

在login的時候其實(shí)已經(jīng)生成了jwt令牌,但是需要在login里面把令牌保存下來,然后提供成service下面的其他方法使用,需要用到ThreadLocal保存下來

每一次請求其實(shí)都是單獨(dú)的線程,每個線程都有單獨(dú)的存儲空間,所以我們可以把數(shù)據(jù)存在里面,在不用的類(service類不同方法)共享這個數(shù)據(jù)

先在攔截器里調(diào)用

BaseContext.setCurrentId(empId);

其中操作很簡單,關(guān)鍵是ThreadLocal的概念

遇到bug&技巧

1.調(diào)用getset的時候沒有自動補(bǔ)全:下載插件lombok 2.在寫Mapper的時候用@Insert寫mysql代碼,沒有自動補(bǔ)全。Insert開頭黃色燈泡 3.調(diào)試的時候需要設(shè)置一下全局參數(shù),jwt令牌,先去登錄那邊獲取,然后在全局參數(shù)設(shè)置一個token的,為什么叫token去application.yml配置文件設(shè)置的 4.測試的時候發(fā)現(xiàn)返回500,查閱的時候發(fā)現(xiàn)

@Insert("insert into employee (name,username,password,phone,sex,id_number,create_time,update_time,create_user,update_user) VALUES " +

"(#{name},#{username},#{password},#{phone},#{sex},#{idNumber},#{createTime},#{updateTime},#{createUser},#{updateUser})")

void insert(Employee employee);

values后面需要駝峰命名,前面一部分是mysql設(shè)置好的表的格式 5. ex.getMessage().var可以自動補(bǔ)全定義

員工分頁查詢

產(chǎn)品經(jīng)理需求分析

請求格式是Query不是json

需要返回一頁的數(shù)據(jù)

Controller

@GetMapping("/page")

@ApiOperation("分頁查詢")

public Result page(EmployeePageQueryDTO employeePageQueryDTO){

log.info("員工分頁查詢,參數(shù)為:{}",employeePageQueryDTO);

PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);

return Result.success(pageResult);

}

@GetMapping(“/page”) 定義接口

impl

使用pagehelper插件(mybatis自帶的)

public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO){

//select * from employee limit 0,10

PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());

//是基于TreadLocal實(shí)現(xiàn)的,獲得Limit 自動拼接到Mapper.xml之中

Page page = employeeMapper.pageQuery(employeePageQueryDTO);

long total = page.getTotal();

List result = page.getResult();

return new PageResult(total,result); //

}

pageQuery是在Mapper里面實(shí)現(xiàn)的,然后實(shí)現(xiàn)方法是通過,EmployeeMapper.xml里面寫代碼

mapper namespace="com.sky.mapper.EmployeeMapper">

Preparing: SELECT count(0) FROM employee這部分是mybatisX插件幫助寫的

員工分頁查詢,參數(shù)為:EmployeePageQueryDTO(name=null, page=1, pageSize=10)

2024-07-05 14:48:02.595 DEBUG 26312 --- [nio-8080-exec-2] c.s.m.EmployeeMapper.pageQuery_COUNT : ==> Preparing: SELECT count(0) FROM employee

2024-07-05 14:48:02.595 DEBUG 26312 --- [nio-8080-exec-2] c.s.m.EmployeeMapper.pageQuery_COUNT : ==> Parameters:

2024-07-05 14:48:02.596 DEBUG 26312 --- [nio-8080-exec-2] c.s.m.EmployeeMapper.pageQuery_COUNT : <== Total: 1

2024-07-05 14:48:02.597 DEBUG 26312 --- [nio-8080-exec-2] com.sky.mapper.EmployeeMapper.pageQuery : ==> Preparing: select * from employee LIMIT ?

2024-07-05 14:48:02.597 DEBUG 26312 --- [nio-8080-exec-2] com.sky.mapper.EmployeeMapper.pageQuery : ==> Parameters: 10(Integer)

2024-07-05 14:48:02.598 DEBUG 26312 --- [nio-8080-exec-2] com.sky.mapper.EmployeeMapper.pageQuery : <== Total: 3

展示時間格式不對

第一種 按照注釋的方式

//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

private LocalDateTime createTime;

第二種 使用WebMvcConfiguration類來解決

/**

* 擴(kuò)展Spring MVC框架的消息轉(zhuǎn)化器

* @param converters

*/

@Override

protected void extendMessageConverters(List> converters) {

log.info("啟動消息轉(zhuǎn)化器。。。");

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

converter.setObjectMapper(new JacksonObjectMapper());

converters.add(0,converter);

}

bug&技巧

1.在寫Mapper的時候沒有報錯,無法自動生成pagehelper的相關(guān)代碼,下載插件,mybatisX

啟用禁用員工賬號

產(chǎn)品分析

controller

如果需要返回數(shù)據(jù)的話, public result<返回的數(shù)據(jù)> 如果不返回數(shù)據(jù) 就public result就行了

@PostMapping("/status/{status}")

@ApiOperation("啟動禁用員工賬號")

public Result startOrStop(@PathVariable Integer status,Long id){ //路徑參數(shù)加PathVariable 路徑參數(shù)就是/(status)

log.info("啟動禁用員工賬號:{},{}",status,id);

employeeService.startOrStop(status,id);

return Result.success();

}

serviceimpl

使用builder更加裝逼,再使用Mapper去調(diào)用sql語句

public void startOrStop(Integer status, Long id){

//update employee set status = ? where id = ?

// Employee employee = new Employee();

// employee.setStatus(status);

Employee employee = Employee.builder()

.status(status)

.id(id)

.build();

employeeMapper.update(employee);

}

Mapper

因?yàn)閯討B(tài)修改屬性,所以使用Mapper映射文件去使用,

update employee

name = #{name},

username = #{username},

password = #{password},

phone = #{phone},

sex = #{sex},

idNumber = #{idNumber},

updateTime = #{updateTime},

updateUser = #{updateUser},

status = #{status},

where id = #{id}

修改的時候回顯員工信息

修改信息時候回顯

分析需要id查詢,需要返回整個employee的信息去顯示 首先是使用Get在controller里面請求,

@GetMapping("/{id}")

@ApiOperation("根據(jù)id獲取員工的資料")

public Result getById(@PathVariable Long id){

log.info("編輯員工信息,id為{}",id);

Employee employee = employeeService.getById(id);

return Result.success(employee);

}

serice

/**

* 根據(jù)id查員工信息

*

* @param id

* @return

*/

public Employee getById(Long id){

Employee employee = employeeMapper.getById(id);

employee.setPassword("******");

return employee;

}

Mapper

@Select("select * from employee where id = #{id}")

Employee getById(Long id);

這里我出現(xiàn)錯誤,把@select寫成了@Insert是不對的,修改完之后就有回顯了

修改員工的信息

Put方法controller參數(shù)是DTO,不需要return就返回Result.success

service里面就參數(shù)DTO,去BeanUtils從DTO變成正常Employee類

記得要updateTime 和User更改修改的時間和修改人

然后就調(diào)用之前寫好的Mapper類里面的update函數(shù)(封裝到Mapper.xml)里面

public void update(EmployeeDTO employeeDTO){

Employee employee = new Employee();

BeanUtils.copyProperties(employeeDTO,employee);

employee.setUpdateTime(LocalDateTime.now());

employee.setUpdateUser(BaseContext.getCurrentId());

employeeMapper.update(employee);

}

bug

去調(diào)試的時候發(fā)現(xiàn),updateTime是沒有的

Cause: java.sql.SQLSyntaxErrorException: Unknown column 'updateTime' in 'field list'

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'updateTime' in 'field list'] with root cause

原因是xml文檔里面是錯誤的

update employee

name = #{name},

username = #{username},

password = #{password},

phone = #{phone},

sex = #{sex},

id_Number = #{idNumber},

update_Time = #{updateTime},

update_User = #{updateUser},

status = #{status},

where id = #{id}

update_Time = #{updateTime}

還有一個錯誤

@PutMapping

@ApiOperation("編輯員工信息")

public Result update(@RequestBody EmployeeLoginDTO employeeLoginDTO){

log.info("編輯員工信息:{}",employeeLoginDTO);

employeeService.update(employeeLoginDTO);

return Result.success();

}

@PutMapping后面沒有網(wǎng)址參數(shù)了,獲取的是employee頁面的里面自帶的json格式,所以我們在傳參的時候需要把**@RequestBody**給加上,才能正確的返回DTO的值

發(fā)現(xiàn)我全部用的EmployeeloginDTO,這個時候需要的是全部的DTO。。。。。。。。。。。。。。。。。。 全部改完就好了

導(dǎo)入分類模塊功能代碼

知識

GET:

用途:用于從服務(wù)器獲取數(shù)據(jù)。 特性:請求通常是冪等的(多次請求對服務(wù)器的資源不會產(chǎn)生不同的結(jié)果),請求參數(shù)通常包含在URL中。 例子:訪問網(wǎng)頁、獲取API數(shù)據(jù)等。 POST:

用途:用于向服務(wù)器發(fā)送數(shù)據(jù)以創(chuàng)建新的資源。 特性:請求不是冪等的(多次相同的請求可能會產(chǎn)生不同的結(jié)果),請求數(shù)據(jù)包含在請求體中。 例子:提交表單、上傳文件等。 PUT:

用途:用于向服務(wù)器發(fā)送數(shù)據(jù)以更新現(xiàn)有資源。 特性:請求通常是冪等的,整個資源數(shù)據(jù)包含在請求體中。 例子:更新用戶信息、更改文件內(nèi)容等。 DELETE:

用途:用于從服務(wù)器刪除指定的資源。 特性:請求通常是冪等的。 例子:刪除用戶賬戶、移除文件等。

總結(jié)

新增員工接受網(wǎng)頁TDO,轉(zhuǎn)Employee,去Mapper里面Insert,直接使用注釋@Insert就能完成,不返回內(nèi)容只返回success

分頁查詢,使用Mybatis的pagehelper類去完成代碼,傳入pageDTO(可以其實(shí)是沒有在前端輸入?yún)?shù)的,是通過TreadLocal自動獲取的內(nèi)容)就可以,DTO包括了頁碼和每頁最大的頁數(shù),返回的是PageResult(成員屬性就是頁碼和每頁最大的頁數(shù)) 其中,Mapper使用了XML文件去完成這個操作

禁用設(shè)置 需要頁面屬性做status做參數(shù),所以接受的前面加上了**@PathVariable** ,沒有返回所以success就行,sql本質(zhì)是update,所以使用了xml完成了所有的update但是在命名上要注意駝峰和下劃線_,傳給Mapper的時候update函數(shù)接受的都是整個employee

編輯員工 傳入的是網(wǎng)頁參數(shù)要加上@RquestBody參數(shù),本質(zhì)還是update,所以用上面的代碼就可以,

柚子快報邀請碼778899分享:java 蒼穹外賣day02

http://yzkb.51969.com/

好文推薦

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19495176.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄