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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

任務四

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

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

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

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

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

知識準備

任務實施步驟1:新建用戶Mapper接口t在項目目錄mapper包下,新建UserInfoMapper類,結果如圖3-30所示:

任務實施步驟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);

任務實施步驟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);}

任務實施步驟2:新建用戶Service類t1.在項目目錄service包下,新建admin包,結果如圖3-31所示:

任務實施步驟2:新建用戶Service類t2.在項目目錄service.admin包下,新建UserService類,結果如圖3-32所示:

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

}

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

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

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

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

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

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

*驗證用戶用戶名密碼是否正確的方法 *@paraminfo用于判定用戶名、密碼的用戶對象

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

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

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

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

//返回驗證失敗 returnfalse;

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

//構建加密對象 BCryptPasswordEncoderencoder=newBCryptPasswordEncoder();

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

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

//如果不一致 }else{

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

//其他情況下返回驗證失敗 returnfalse; }

任務實施步驟3:新建用戶Controller類t1.在項目目錄api包下,新建admin包,結果如圖3-33所示

任務實施步驟3:新建用戶Controller類t2.在項目目錄api.admin包下,新建AdminUserController類,結果如圖3-34所示:

任務實施步驟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); }

任務實施步驟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){

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

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

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

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

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

//嘗試將結果結構化 returnPageResults.success(list,page,maxPage); }

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

溫馨提示

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

評論

0/150

提交評論