【尚籌網IDEA版】06-管理員資訊維護
先前的記錄:
【尚籌網IDEA版】02-資料庫建立、Mybatis逆向、Spring整合Mybatis
程式碼下載:
git clone https://github.com/YuanbaoQiang/atcrowdfunding.git
說明:
前端程式碼部落格中不涉及!需要直接看原始碼即可!
分頁功能實現(查詢管理員)
目標
將管理員的資訊通過分頁的形式顯示在頁面上。特殊需求:兼顧關鍵詞查詢,讓後端程式碼不管有沒有查詢條件都可以以分頁形式顯示資料。
思路
程式碼
需要用到PageHelper
外掛,配置過程可以參考:報錯解決:使用分頁外掛遇到java-lang-ClassNotFoundException-mysql
以下兩個檔案也得先配置好!
handler方法
@RequestMapping("/admin/get/page.html")
public String getPageInfo(
// 使用@RequestParam註解的default屬性,指定預設值,在請求沒有攜帶對應引數時使用預設值
// keyword預設值使用空字串,和SQL語句配合實現兩種情況的適配
@RequestParam(value = "keyword",defaultValue = "") String keyword,
// pageNum預設值使用1
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
// pageSize預設值使用5
@RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
// PgaeInfo物件存入模型
ModelMap modelMap
){
// 呼叫Service方法獲取PageInfo物件
PageInfo<Admin> pageInfo = adminService.getPageInfo(keyword, pageNum, pageSize);
// 將PageInfo物件存入到模型
modelMap.addAttribute(CrowdConstant.ATTR_NAME_PAGE_INFO, pageInfo);
return "admin-page";
}
在AdminService
介面中宣告getPageInfo
方法
PageInfo<Admin> getPageInfo(String keyword, Integer pageNum, Integer pageSize);
在AdminServiceImpl
中重寫getPageInfo
方法
@Override
public PageInfo<Admin> getPageInfo(String keyword, Integer pageNum, Integer pageSize) {
// 1. 呼叫PageHelper的靜態方法,開啟分頁的功能
// 這裡充分體現了PageHelper的“非侵入式”設計:原本要做的查詢不必有任何的修改
PageHelper.startPage(pageNum,pageSize);
// 2. 執行查詢
List<Admin> adminList = adminMapper.selectAdminByKeyword(keyword);
// 3. 封裝到PageInfo物件中
return new PageInfo<>(adminList);
}
關鍵詞查詢功能實現
<select id="selectAdminByKeyword" resultMap="BaseResultMap">
select id, login_acct, user_pswd, user_name, email, create_time
from t_admin
where
login_acct like concat("%",#{keyword},"%") or
user_name like concat("%",#{keyword},"%") or
email like concat("%",#{keyword},"%")
</select>
List<Admin> selectAdminByKeyword(String keyword);
分頁條配置
為了避免死迴圈,需要註釋掉如下資訊!
如果註釋掉頁面還是在無限迴圈,極有可能是頁面資料快取的原因!可以參考:記一次使用JQuery的Pagination分頁外掛時死迴圈BUG定位
新增管理員
目標
建立新的管理員,並通過表單的形式儲存到資料庫。
思路
程式碼
配置view-controller
<mvc:view-controller path="/admin/to/add/page.html" view-name="admin-add"/>
配置handler方法
@RequestMapping("/admin/save.html")
public String save(Admin admin){
adminService.saveAdmin(admin);
// 重定向到分頁頁面,使用重定向是為了避免重新整理瀏覽器重複提交表單
return "redirect:/admin/get/page.html?pageNum=" + Integer.MAX_VALUE;
}
AdminService介面
void saveAdmin(Admin admin);
AdminServiceImpl介面實現類
@Override
public void saveAdmin(Admin admin) {
// 1. 密碼的加密
String userPswd = admin.getUserPswd();
userPswd = CrowdUtil.md5(userPswd);
admin.setUserPswd(userPswd);
// 2. 生成建立時間
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String createTime = format.format(date);
admin.setCreateTime(createTime);
// 3.執行儲存
try {
adminMapper.insert(admin);
} catch (Exception exception) {
exception.printStackTrace();
logger.info("異常的全類名=" + exception.getClass().getName());
// 如果儲存重複的login_acct,則會報錯,上述的logge資訊如下:
// [異常的全類名=org.springframework.dao.DuplicateKeyException]
if(exception instanceof DuplicateKeyException){
throw new LoginAcctAlreadyInUseException(CrowdConstant.MESSAGE_REMOVE_ACCT_ALREADY_IN_USE);
}
}
}
涉及到的自定義異常類:LoginAcctAlreadyInUseException
package com.yuanbaoqiang.crowd.exception;
/**
* @description: 儲存或更新Admin時如果檢測到登陸賬號重複丟擲這個異常
* @author: YuanbaoQiang
* @time: 2020/11/9 14:14
*/
public class LoginAcctAlreadyInUseException extends RuntimeException{
private static final long serialVersionUID = 1L;
public LoginAcctAlreadyInUseException() {
}
public LoginAcctAlreadyInUseException(String message) {
super(message);
}
public LoginAcctAlreadyInUseException(String message, Throwable cause) {
super(message, cause);
}
public LoginAcctAlreadyInUseException(Throwable cause) {
super(cause);
}
public LoginAcctAlreadyInUseException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
異常處理
/*
* @description: 處理新增
* @param exception
* @param request
* @param response
* @return: org.springframework.web.servlet.ModelAndView
* @author: YuanbaoQiang
* @time: 2020/11/9 15:06
*/
@ExceptionHandler(value = LoginAcctAlreadyInUseException.class)
public ModelAndView resolveLoginAcctAlreadyInUseException(
LoginAcctAlreadyInUseException exception,
HttpServletRequest request,
HttpServletResponse response) throws IOException {
String viewName = "admin-add";
return commonResolve(viewName,exception,request,response);
}
刪除管理員
目標
在瀏覽器頁面實現管理員資訊的刪除!
思路
程式碼
handler方法
@RequestMapping("/admin/remove/{adminId}/{pageNum}/{keyword}.html")
public String remove(
@PathVariable("adminId") Integer adminId,
@PathVariable("pageNum") Integer pageNum,
@PathVariable("keyword") String keyword,
HttpSession session
){
Admin admin = (Admin) session.getAttribute(CrowdConstant.ATTR_NAME_LOGIN_ADMIN);
if(admin.getId() == adminId){
// 此時預刪除的管理員的id和正在登陸的管理員的id重合,需要丟擲異常
throw new RuntimeException(CrowdConstant.MESSAGE_REMOVE_ACCT_ALREADY_IN_USE);
}else{
// 執行刪除命令
adminService.removeAdminById(adminId);
// 頁面的跳轉:回到分頁的頁面
// 嘗試方案1:直接轉發admin-page.jsp會無法顯示分頁資料
// return "admin-page";
// 嘗試方案2:轉發到admin/get/page.html,一旦重新整理會重複執行刪除的操作,浪費效能
// return "admin/get/page.html"
// 嘗試方案3:重定向到admin/get/page.html地址
// 同時為了保持原本所在的頁面和查詢關鍵詞再附加pageNum和keyword兩個請求引數
}
return "redirect:/admin/get/page.html?pageNum=" + pageNum + "&keyword=" + keyword;
}
AdminService介面
void removeAdminById(Integer adminId);
AdminServiceImpl實現類方法
@Override
public void removeAdminById(Integer adminId) {
adminMapper.deleteByPrimaryKey(adminId);
}
修改管理員
目標
通過頁面上的表單來修改管理員的資訊
思路
程式碼
handler方法
@RequestMapping("/admin/update.html")
public String update(
Admin admin,
@RequestParam("pageNum") Integer pageNum,
@RequestParam("keyword") String keyword
){
adminService.update(admin);
return "redirect:/admin/get/page.html?pageNum=" + pageNum + "&keyword=" + keyword;
}
AdminService介面
void update(Admin admin);
AdminServiceImpl介面實現類
@Override
public void update(Admin admin) {
// "Selective"表示有選擇的更新,對於null值的欄位不更新
try {
adminMapper.updateByPrimaryKeySelective(admin);
} catch (Exception exception) {
exception.printStackTrace();
logger.info("異常的全類名為:" + exception.getClass().getName());
if(exception instanceof DuplicateKeyException){
throw new LoginAcctAlreadyInUseForUpdateException(CrowdConstant.MESSAGE_REMOVE_ACCT_ALREADY_IN_USE);
}
}
}
相關文章
- 尚籌網(眾籌專案實戰)
- 維護區間資訊
- 郭敬明道歉承認作品抄襲:如何維護網際網路作品版權資訊
- 六、資料庫管理與維護資料庫
- 《大型資料庫技術》MySQL管理維護資料庫MySql
- NSACE|如何正確地維護企業的網路資訊保安?
- 個人IDEA使用記錄(持續維護)Idea
- Oracle統計資訊的收集和維護Oracle
- 如何用SEO來最佳化網路資訊維護品牌形象?
- 管理與維護Linux系統Linux
- ORACLE user profile配置/管理/維護Oracle
- [MySQL光速入門]029 資料庫管理和維護MySql資料庫
- 網管平臺(進階篇):網管系統的管理與維護
- 如何用SEO來最佳化網路負面資訊維護公司品牌呢?
- 還在用Excel維護客戶資訊?你OUT了Excel
- 尚矽谷springboot視訊資料分享Spring Boot
- 網站怎樣利用整體性防護策略維護資料安全?網站
- 1.1.3 網路管理員
- 創新公司員工的資訊管理系統
- 尚矽谷大資料視訊_Shell視訊教程大資料
- 網站安全維護公司解決防護方案網站
- IPIDEA代理IP,保護網路資訊保安Idea
- 企業微信客戶群如何新增多個管理員協助群主維護群呢?
- 維護網路安全秩序 騰訊7款App被責令整改APP
- 企業WiFi管理 保護我們的資訊保安WiFi
- IDEA-idea設定護眼模式Idea模式
- 【守護終端】火絨“終端安全管理系統” 守護企業網路財產與資訊保安
- mac系統清理維護工具MacBooster Mac版Mac
- 如何做伺服器安全維護,網站安全維護怎麼做好伺服器網站
- 專案二 管理與維護Linux系統Linux
- 專案二 管理與維護Linux系統Linux
- 權利義務框架下的移動網際網路APP個人資訊保護——《個人資訊保護法》對APP個人資訊保護影響分析框架APP
- 資料庫常用維護命令資料庫
- 5G新基建加速 微波通訊網路運營維護方案
- 網路網賭網站出款埠維護升級銀行維護不給提現該怎麼辦?網站
- 最佳化半群結構的線段樹資訊維護
- 網際網路通訊安全之終端資料保護
- 06-資料型別——字典資料型別