【尚籌網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);
}
}
}
相關文章
- 尚籌網(眾籌專案實戰)
- 網路維護員工作
- 依法使用網路維護資訊保安
- 維護區間資訊
- 網路規劃設計管理維護
- Windows網路的管理與維護(轉)Windows
- mysql 管理維護MySql
- 與網路版權、資料庫技術保護、權利管理資訊資料庫
- 郭敬明道歉承認作品抄襲:如何維護網際網路作品版權資訊
- 歌頌程式維護人員
- 企業網路安全管理維護之探析
- RAC維護管理命令
- 孟建柱:著力提高資訊素養維護網路安全
- 個人IDEA使用記錄(持續維護)Idea
- oracle rac管理維護筆記_轉自網友Oracle筆記
- Oracle AWR管理與維護Oracle
- 網際網路時代如何保護及管理個人身份資訊
- NSACE|如何正確地維護企業的網路資訊保安?
- ORACLE user profile配置/管理/維護Oracle
- oracle表空間管理維護Oracle
- Oracle統計資訊的收集和維護Oracle
- 如何用SEO來最佳化網路資訊維護品牌形象?
- 一批新法6月實施:維護網路與資訊保安
- 陌陌上線網頁版 維護熟人社交為直播or營銷?網頁
- 網管平臺(進階篇):網管系統的管理與維護
- 半自動化運維之伺服器資訊維護運維伺服器
- 六、資料庫管理與維護資料庫
- oracle維護管理指令(不斷更新)Oracle
- 管理與維護Linux系統Linux
- Oracle Standby系統管理與維護Oracle
- 網路除錯維護方法除錯
- 1.1.3 網路管理員
- MVC驗證06-自定義錯誤資訊MVC
- 網路管理員指南 -10.網路資訊系統 -1>熟悉NIS(轉)
- 網站安全維護公司解決防護方案網站
- 維護網路安全保護人民利益
- 企業網路病毒防護的維護策略
- ORACLE資料庫管理維護綱要Oracle資料庫