Java應(yīng)用開(kāi)發(fā)(中、高級(jí))課件 任務(wù)2.4 實(shí)現(xiàn)用戶管理模塊HTTP API_第1頁(yè)
Java應(yīng)用開(kāi)發(fā)(中、高級(jí))課件 任務(wù)2.4 實(shí)現(xiàn)用戶管理模塊HTTP API_第2頁(yè)
Java應(yīng)用開(kāi)發(fā)(中、高級(jí))課件 任務(wù)2.4 實(shí)現(xiàn)用戶管理模塊HTTP API_第3頁(yè)
Java應(yīng)用開(kāi)發(fā)(中、高級(jí))課件 任務(wù)2.4 實(shí)現(xiàn)用戶管理模塊HTTP API_第4頁(yè)
Java應(yīng)用開(kāi)發(fā)(中、高級(jí))課件 任務(wù)2.4 實(shí)現(xiàn)用戶管理模塊HTTP API_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

任務(wù)四

實(shí)現(xiàn)用戶管理模塊HTTPAPI04

任務(wù)描述本任務(wù)將完成用戶管理模塊,包含用戶的添加、刪除、修改、查詢功能;管理員通過(guò)賬號(hào)密碼生成具有管理員權(quán)限的token后,能夠根據(jù)用戶信息中的用戶ID對(duì)用戶信息進(jìn)行新增、刪除和修改,并通過(guò)接口分頁(yè)獲取用戶信息。在本任務(wù)中,將學(xué)習(xí)如何設(shè)計(jì)API接口。

知識(shí)準(zhǔn)備1.MyBatis框架:見(jiàn)項(xiàng)目22.Mybatis常用注解(1)@Mapper注解添加了@Mapper注解之后,這個(gè)接口在編譯時(shí)會(huì)生成相應(yīng)的實(shí)現(xiàn)類。需要注意的是:這個(gè)接口中不可以定義同名的方法,因?yàn)闀?huì)生成相同的id;也就是說(shuō)這個(gè)接口是不支持重載的。(2)@Insert注解插入sql,和xml<insert>sql語(yǔ)法完全一樣。每個(gè)注解分別代表將會(huì)被執(zhí)行的SQL語(yǔ)句。它們用字符串?dāng)?shù)組(或單個(gè)字符串)作為參數(shù)。如果傳遞的是字符串?dāng)?shù)組,字符串?dāng)?shù)組會(huì)被連接成單個(gè)完整的字符串,每個(gè)字符串之間加入一個(gè)空格。這有效地避免了用Java代碼構(gòu)建SQL語(yǔ)句時(shí)產(chǎn)生的“丟失空格”問(wèn)題。當(dāng)然,你也可以提前手動(dòng)連接好字符串。屬性:value,指定用來(lái)組成單個(gè)SQL語(yǔ)句的字符串?dāng)?shù)組。

知識(shí)準(zhǔn)備(3)@Delete注解刪除sql,和xml<delete>sql語(yǔ)法完全一樣(4)@Update注解更新sql,和xml<update>sql語(yǔ)法完全一樣(5)@Select注解查詢sql,和xml<select>sql語(yǔ)法完全一樣

知識(shí)準(zhǔn)備(6)@Param注解如果你的映射器的方法需要多個(gè)參數(shù),這個(gè)注解可以被應(yīng)用于映射器的方法參數(shù)來(lái)給每個(gè)參數(shù)一個(gè)名字。否則,多參數(shù)將會(huì)以它們的順序位置來(lái)被命名(不包括任何RowBounds參數(shù))比如。#{param1},#{param2}等,這是默認(rèn)的。使用@Param(“person”),參數(shù)應(yīng)該被命名為#{person}。(7)@Options注解這個(gè)注解提供訪問(wèn)交換和配置選項(xiàng)的寬廣范圍,它們通常在映射語(yǔ)句上作為屬性出現(xiàn)。而不是將每條語(yǔ)句注解變復(fù)雜,Options注解提供連貫清晰的方式來(lái)訪問(wèn)它們。

知識(shí)準(zhǔn)備

任務(wù)實(shí)施步驟1:新建用戶Mapper接口t在項(xiàng)目目錄mapper包下,新建UserInfoMapper類,結(jié)果如圖3-30所示:

任務(wù)實(shí)施步驟1:新建用戶Mapper接口t1.在UserInfoMapper類中添加下面的代碼:@MapperpublicinterfaceUserInfoMapper{

@Select("selectuserId,userAccount,userPass,locked,roleId,roleName,faceimgfromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdorderbyuserId") publicList<UserInfo>getAllUser();

@Insert("insertintouserinfo(userAccount,userPass,role,faceImg)values(#{info.userAccount},#{info.userPass},#{info.roleId},#{info.faceimg})") @Options(useGeneratedKeys=true,keyProperty="info.userId") publicIntegeraddUser(@Param("info")UserInfouser);

@Select("selectuserId,userAccount,userPass,locked,roleId,roleName,faceimgfromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdorderbyuserIdlimit#{first},#{max}") publicList<UserInfo>getUserByPage(@Param("first")intfirst,@Param("max")intmax); @Select("selectcount(*)fromuserinfo") publicLonggetMaxPage();

@Delete("deletefromuserinfowhereuserId=#{userId}") publicvoiddeleteUser(@Param("userId")IntegeruserId);

任務(wù)實(shí)施步驟1:新建用戶Mapper接口t@Update("updateuserinfosetuserPass=#{info.userPass},faceimg=#{info.faceimg}whereuserId=#{info.userId}") publicvoidmodify(@Param("info")UserInfoinfo); @Update("updateuserinfosetuserPass=#{info.userPass},faceimg=#{info.faceimg},role=#{info.roleId}whereuserId=#{info.userId}") publicvoidadminModify(@Param("info")UserInfoinfo); @Select("selectuserId,userAccount,userPass,locked,roleId,roleName,faceimgfromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdanduserId=#{userId}") publicUserInfogetUserById(@Param("userId")IntegeruserId); @Select("selectuserId,userAccount,userPass,locked,roleId,roleNamefromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdanduserinfo.userId=#{info.userId}") publicList<UserInfo>checkPass(@Param("info")UserInfoinfo);

@Select("selectuserId,userAccount,userPass,locked,roleId,roleName,faceimgfromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdanduserinfo.userAccount=#{userAccount}") publicList<UserInfo>findUsersByName(@Param("userAccount")StringuserAccount);}

任務(wù)實(shí)施步驟2:新建用戶Service類t1.在項(xiàng)目目錄service包下,新建admin包,結(jié)果如圖3-31所示:

任務(wù)實(shí)施步驟2:新建用戶Service類t2.在項(xiàng)目目錄service.admin包下,新建UserService類,結(jié)果如圖3-32所示:

任務(wù)實(shí)施步驟2:新建用戶Service類t3.在UserService類中添加下面的代碼@ServicepublicclassUserService{ @AutowiredUserInfoMappermapper; publicUserInfoMappergetMapper(){ returnmapper; } publicvoidsetMapper(UserInfoMappermapper){ this.mapper=mapper; }

}

任務(wù)實(shí)施步驟2:新建用戶Service類t4.在UserService類中添加用于增刪改的方法(1)添加用戶的方法/** *添加用戶的方法 *@paraminfo需要添加的用戶信息 **/ publicvoidaddUser(UserInfoinfo){ //創(chuàng)建加密工具 info.setUserPass(newBCryptPasswordEncoder().encode(info.getUserPass())); //執(zhí)行用戶信息插入操作 mapper.addUser(info); }

任務(wù)實(shí)施步驟2:新建用戶Service類t(2)刪除用戶的方法 /** *刪除用戶的方法 *@paramuserId待刪除用戶的Id **/ publicvoiddeleteUser(IntegeruserId){ //獲取帶有連接池的數(shù)據(jù)庫(kù)模版操作工具對(duì)象 mapper.deleteUser(userId); }

任務(wù)實(shí)施步驟2:新建用戶Service類t(3)修改用戶的方法 /** *修改用戶自身信息的方法 *@paraminfo需要修改的用戶信息,其中userId屬性指明需要修改的用戶ID,其他信息為目標(biāo)值,本人修改信息只能修改密碼和頭像 **/ publicvoidmodify(UserInfoinfo){ //獲取帶有連接池的數(shù)據(jù)庫(kù)模版操作工具對(duì)象 info.setUserPass(newBCryptPasswordEncoder().encode(info.getUserPass())); //修改本人信息 mapper.modify(info); } /** *管理員修改用戶信息的方法 *@paraminfo需要修改的用戶信息,其中userId屬性指明需要修改的用戶ID,其他信息為目標(biāo)值 **/ publicvoidadminModify(UserInfoinfo){ info.setUserPass(newBCryptPasswordEncoder().encode(info.getUserPass())); //修改本人信息 mapper.adminModify(info); }

任務(wù)實(shí)施步驟2:新建用戶Service類t5.在UserService類中添加用于查詢的方法(1)分頁(yè)獲取用戶數(shù)據(jù)的方法/** *分頁(yè)獲取用戶數(shù)據(jù)的方法 *@parampage要獲取數(shù)據(jù)的頁(yè)號(hào) *@parampageSize每頁(yè)顯示的條目數(shù) *@return當(dāng)前頁(yè)的用戶數(shù)據(jù)列表 **/ publicList<UserInfo>getByPage(intpage,intpageSize){ //獲取帶有連接池的數(shù)據(jù)庫(kù)模版操作工具對(duì)象 intfirst=(1)*pageSize; //返回結(jié)果 returnmapper.getUserByPage(first,pageSize); } /** *獲取用戶信息的最大頁(yè)數(shù) *@parampageSize每頁(yè)顯示的條目數(shù) *@return當(dāng)前數(shù)據(jù)庫(kù)中數(shù)據(jù)的最大頁(yè)數(shù) **/ publicintgetMaxPage(intpageSize){ //獲取最大頁(yè)數(shù)信息 Longrows=mapper.getMaxPage(); //返回最大頁(yè)數(shù) return(int)((rows.longValue()-1)/pageSize+1); }

任務(wù)實(shí)施步驟2:新建用戶Service類t(2)根據(jù)ID獲取用戶詳細(xì)信息的方法 /** *根據(jù)ID獲取用戶詳細(xì)信息的方法 *@paramuserId需要獲取詳細(xì)信息的用戶ID *@return返回查詢到的用戶詳細(xì)信息 **/ publicUserInfogetUserById(IntegeruserId){ returnmapper.getUserById(userId); } publicList<UserInfo>findUserByName(StringuserAccount){ returnmapper.findUsersByName(userAccount); }

任務(wù)實(shí)施步驟2:新建用戶Service類t6.在UserService類中添加用于檢查用戶名是否可用的方法/**

*驗(yàn)證用戶用戶名密碼是否正確的方法 *@paraminfo用于判定用戶名、密碼的用戶對(duì)象

*@return用戶名、密碼是否驗(yàn)證通過(guò),true表示用戶名密碼正確、false表示用戶名或密碼錯(cuò)誤 **/ publicbooleancheckPass(UserInfoinfo){

//根據(jù)給定的用戶名查詢用戶信息 List<UserInfo>userList=mapper.checkPass(info);

//判定查詢結(jié)果集合 switch(userList.size()){

//如果沒(méi)有查詢到任何數(shù)據(jù) case0:

//返回驗(yàn)證失敗 returnfalse;

//如果查詢到一條記錄則判定密碼是否一致 case1:

//構(gòu)建加密對(duì)象 BCryptPasswordEncoderencoder=newBCryptPasswordEncoder();

//判定用戶給定的密碼和數(shù)據(jù)庫(kù)中的密碼是否一致 if(encoder.matches(info.getUserPass(),userList.get(0).getUserPass())){

//如果一致,則返回true returntrue;

//如果不一致 }else{

//返回用戶名、密碼不匹配 returnfalse; } }

//其他情況下返回驗(yàn)證失敗 returnfalse; }

任務(wù)實(shí)施步驟3:新建用戶Controller類t1.在項(xiàng)目目錄api包下,新建admin包,結(jié)果如圖3-33所示

任務(wù)實(shí)施步驟3:新建用戶Controller類t2.在項(xiàng)目目錄api.admin包下,新建AdminUserController類,結(jié)果如圖3-34所示:

任務(wù)實(shí)施步驟3:新建用戶Controller類t3.在AdminUserController類中添加下面的代碼@PreAuthorize("hasRole('1')")@RestController@RequestMapping("/admin/user")publicclassAdminUserController{ @AutowiredUserServiceservice; publicUserServicegetService(){ returnservice; } publicvoidsetService(UserServiceservice){ this.service=service; } @RequestMapping("/adminmodifyuser") publicResultsadminModify(UserInfoinfo){if(info.getUserPass().isEmpty()){ info.setUserPass("1"); }

//執(zhí)行修改操作 service.adminModify(info); returnResults.success(info); }

任務(wù)實(shí)施步驟3:新建用戶Controller類t@RequestMapping("/deleteuser") publicResultsdeleteUser(IntegeruserId){ service.deleteUser(userId); returnResults.ok(); } @GetMapping("/get") publicResults<UserInfo>getUser(IntegeruserId){ UserInfouser=service.getUserById(userId); user.setUserPass(""); returnResults.success(user); } @RequestMapping("/getuserbypage") publicPageResultsgetUserByPage(intpage){

//獲取最大頁(yè)碼數(shù) intmaxPage=service.getMaxPage(10);

//對(duì)當(dāng)前的頁(yè)碼數(shù)進(jìn)行糾錯(cuò),如果小于1,則直接顯示第一頁(yè)的內(nèi)容 page=page<1?1:page;

//對(duì)當(dāng)前的頁(yè)碼數(shù)進(jìn)行糾錯(cuò),如果大于最大頁(yè)碼,則直接顯示最后一頁(yè)的內(nèi)容 page=page>maxPage?maxPage:page;

//進(jìn)行分頁(yè)數(shù)據(jù)查詢 List<UserInfo>list=service.getByPage(page,10);

//過(guò)濾掉密碼信息 list=list.stream().map(item->{item.setUserPass("");returnitem;}).collect(Collectors.toList());

//嘗試將結(jié)果結(jié)構(gòu)化 returnPageResults.success(list,page,maxPage); }

任務(wù)實(shí)施步驟3:新建用戶Controller類t@RequestMapping("/modifyuser") publicResultsmodifyMyInfo(UserInfoinfo){ service.modify(info); //修改信息后需要自動(dòng)注銷(xiāo) returnResults.success(info); } @RequestMapping("/adduser")

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論