目? 錄
一、實驗目的和要求
1、實驗目的
2、實驗要求
二、實驗實現思路及步驟
1、實驗思路
2、實驗步驟
3、實驗方案
三、主要開發工具
四、實驗效果及實現代碼
1、留言本數據庫構建實現
(1)建立javaee-project數據庫
(2)建立message數據表
(3)建立user數據表
2、留言本首頁模塊功能實現
(1)留言本留言信息呈現
(2)留言本留言記錄查詢
(3)留言本鏈接跳轉
3、留言本登錄模塊功能實現
(1)留言本登錄驗證
(2)留言本登錄成功
(3)留言本登錄退出
4、留言本發布留言模塊功能實現
(1)留言本發布留言內容驗證
(2)留言本留言發布
5、留言本留言回復模塊功能實現
(1)留言本留言回復信息
(2)留言本留言回復發布成功
6、留言本刪除留言模塊功能實現
(1)留言本留言刪除驗證
(2)留言本留言刪除成功
五、遇到的問題和解決方法
六、心得體會
一、實驗目的和要求
1、實驗目的
????????熟練掌握Mybatis框架基本用法,web項目中集成Mybatis。
2、實驗要求
????????實現簡單留言本的發貼和回復功能,效果圖如下:
二、實驗實現思路及步驟
1、實驗思路
? ? ? ? (1)設計一個包括留言ID(主鍵,自增),留言者姓名,留言內容,留言時間等屬性的數據庫來存儲留言信息。
? ? ? ? (2)在Java中創建一個實體類,該類對應數據庫中的表,有一系列的getter和setter方法用于訪問和修改這些屬性。
? ? ? ? (3)Mapper層包含了所有與數據庫操作相關的接口,這些接口定義了如何執行數據庫操作。這些接口是MyBatis框架的主要部分,它們定義了如何將Java對象映射到數據庫中的記錄,以及如何從數據庫中檢索記錄并映射回Java對象。
? ? ? ? (4)對于每個Mapper接口,創建一個XML文件來定義如何將接口的方法映射到數據庫中的SQL語句。這些XML文件包含了要執行的SQL語句、參數如何映射到SQL語句中等的詳細信息。
? ? ? ? (5)創建一個名為mybatis-config.xml的配置文件來完成Mapper接口的路徑和XML映射文件的路徑配置。
? ? ? ? (6)Service層包含了業務邏輯的實現,通常會調用Mapper層的方法來操作數據庫,并根據業務需求進行數據的處理。Service實現類(Impl)是Service層的具體實現,它們實現了Service層的接口并實現了相關的業務邏輯。
? ? ? ? (7)創建Controller層:Controller層負責處理用戶請求并調用服務層的業務邏輯,處理HTTP請求,將請求參數轉化為entity對象,并調用service層的方法。
2、實驗步驟
? ? ? ? (1)確定留言本需要存儲的數據,包括留言者的姓名、留言的內容、留言的時間等,可以考慮使用關系型數據庫,如MySQL來存儲這些數據。
? ? ? ? (2)定義數據模型實體類,反映數據庫中的表結構,每個屬性對應一個字段。使用Java的類來表示這些實體,利用IDE的ORM工具IntelliJ IDEA來自動生成這些類和它們對應的數據訪問接口。
????????(3)定義數據訪問接口Mapper層,包含對數據庫進行各種操作的方法,并為每個接口創建一個XML映射文件,該文件包含如何將接口的方法映射到SQL語句的詳細信息。
????????(4)定義業務邏輯層Service層,該層包含判斷留言是否已經存在、統計留言數量等一系列業務邏輯的實現,調用Mapper層的方法來訪問數據庫,并根據業務需求處理數據。
????????(5)設計用戶界面Controller層,該層處理添加留言、查看留言等一系列用戶請求,接收用戶的輸入并將其轉換為程序可以理解的命令,然后調用Service層的方法來執行這些命令。
????????(6)配置數據源、Mapper接口和XML映射文件的路徑等一系列事務管理器以確保事務的一致性。
3、實驗方案
? ? ? ? (1)使用MySQL建立基于MyBatis的留言本需要使用的數據庫(javaee-project)以及數據表(message、user),通過MyBatis配置文件連接對應的數據庫,并通過調用數據庫中的留言信息數據進行相關留言信息的發布、刪除、查看、回復等操作。
? ? ? ? (2)根據課本、PPT和老師課堂中講解的內容,使用IDEA-Java編譯軟件制作基于MyBatis的留言本。
? ? ? ? (3)將代碼編寫過程中遇到的問題及時的進行記錄并在課后向老師進行提問,將遇到的問題進行及時的處理和解答,并將所有的問題和解決方法進行匯總歸納。
? ? ? ? (4)完成最終的項目以及基于MyBatis留言本的實驗報告,最后進行實驗報告排版的檢查并提交。
三、主要開發工具
????????IDEA-Java開發工具、Navicat-MySQL開發工具
四、實驗效果及實現代碼
1、留言本數據庫構建實現
(1)建立javaee-project數據庫
????????打開SQLYog進行數據庫的創建,數據庫創建完畢以后再在數據庫中添加留言信息數據表(message)和用戶信息數據表(user),對應的數據庫構建界面如圖1-1所示:
圖1-1?數據庫構建界面
????????核心代碼:
CREATE DATABASE javaee-project;USE javaee-project;
(2)建立message數據表
? ? ? ? a、message數據表屬性設置
????????留言信息數據表(message)包括昵稱(nickname)、QQ號碼(qq)、電子郵件地址(email)、留言內容(msg)、回復ID(reply_id)、創建時間(create_time)、更新時間(update_time)以及留言類型(type),對應的message屬性設置界面如圖1-2所示:
圖1-2?message屬性設置界面
????????核心代碼:
CREATE?TABLE?`message`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`nickname`?varchar(255)?DEFAULT?NULL,`qq`?varchar(255)?DEFAULT?NULL,`email`?varchar(255)?DEFAULT?NULL,`msg`?varchar(255)?DEFAULT?NULL,`reply_id`?int?DEFAULT?NULL,`create_time`?datetime?DEFAULT?CURRENT_TIMESTAMP,`update_time`?datetime?DEFAULT?CURRENT_ON?UPDATE?CURRENT_TIMESTAMP,`type`?tinyint?DEFAULT?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=108?DEFAULT?CHARSET=utf8mb4?COLLATE=utf8mb4_0900_ai_ci
? ? ? ? b、message數據表信息
????????通過Sql語句進行留言信息數據表(message)的創建并在數據表中添加一部分留言數據信息記錄,對應的message數據信息界面如圖1-3所示:
圖1-3?message數據表信息界面
(3)建立user數據表
? ? ? ? a、user數據表屬性設置
????????用戶信息數據表(user)包括用戶名(name)、密碼(password)、角色(role)和生日(birthday),對應的user屬性設置界面如圖1-4所示:
圖1-4?user屬性設置界面
????????核心代碼:
CREATE?TABLE?`user`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`name`?varchar(255)?DEFAULT?NULL,`password`?varchar(255)?DEFAULT?NULL,`role`?varchar(255)?DEFAULT?NULL,`birthday`?varchar(255)?DEFAULT?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=3?DEFAULT?CHARSET=utf8mb4?COLLATE=utf8mb4_0900_ai_ci
????????b、user數據表信息
????????通過Sql語句進行用戶信息數據表(user)的創建并在數據表中添加一部分用戶數據信息記錄,對應的user數據信息界面如圖1-5所示:
圖1-5?user數據表信息界面
2、留言本首頁模塊功能實現
(1)留言本留言信息呈現
????????項目創建完畢后啟動項目,在留言本的首頁可以看到所有用戶發布的留言以及對留言作出的回復信息,并會將留言數據按5條為一段進行分頁劃分處理操作,整個頁面采用動畫流動設計,為留言本添加了色彩渲染,對應的留言本信息呈現界面如圖2-1所示:
圖2-1?留言本信息呈現界面
????????核心代碼:
<video autoplay="autoplay" loop class="fillWidth" muted="muted" style="position: absolute"><source src="./image/background.mp4"></video><footer class="main-footer" style="background: #f7ecb5"><div class="container"><div class="pull-right hidden-xs"></div><div align="center"><strong><b><b style="color: #0d6aad; margin-left: 30px">設計者:</b>于立偉<b style="color: #720e9e; margin-left: 30px">QQ郵箱:<a href=?"https://mail.qq.com/">3443531275@qq.com</a></b><b style="color: #720e9e; margin-left: 30px">手機號:13830758370</b><b style="color: rgba(12,32,150,0.29); margin-left: 30px">CO:啟 <img src="./image/logoYW.jpg" style="border-radius: 50%" width="20px" height="20px"/> 航</b><b style="color: #720e9e; margin-left: 30px">B站視頻號:<a href="https://www.bilibili.com/video/BV1mh4y1M7id/">尾鯉魚</a></b></b></strong></div></div></footer>
(2)留言本留言記錄查詢
? ? ? ? a、鍵入查詢信息
????????當需要查看指定用戶的留言信息時,可以在留言本最上方的搜索框中輸入自己想要查詢的數據記錄,此處采用了模糊查詢的方式,對應的鍵入查詢界面如圖2-2所示:
圖2-2?鍵入查詢界面
????????核心代碼:
@RequestMapping("/replyByNickname.do")public void replyByNickname(HttpServletRequest request, HttpServletResponse response) {try {request.setCharacterEncoding("UTF-8");String id = request.getParameter("id");String msg = request.getParameter("replyMsg");Message message = new Message();message.setReplyId(Integer.parseInt(id));message.setMsg(msg);message.setType(false);messageService.insert(message);JSONUtil.printByJSON(response, Result.success());} catch (Exception e) {e.printStackTrace();}}@Overridepublic List<Message> list() {SqlSession sqlSession = MybatisUtils.getSqlsession();MessageMapper mapper = sqlSession.getMapper(MessageMapper.class);List<Message> messages = mapper.selectMsg();sqlSession.commit();sqlSession.close();return messages;}
? ? ? ? b、查看查詢結果
????????在搜索框中輸入自己想要查詢的內容后點擊回車鍵即可完成查詢操作,對應的查詢結果會顯示輸出到頁面中,對應的查詢結果界面如圖2-3所示:
圖2-3?查詢結果界面
????????核心代碼:
<c:forEach items="${messages}" var="msg"><div class="box box-default" style="background: rgba(255, 255, 255, 0.5)"><div class="box-header with-border"><h2 class="box-title"><b>${msg.nickname}在<fmt:formatDate value="${msg.createTime}" pattern="yyyy年MM月dd日HH:mm:ss"/>發布留言:</b></h2></div><div class="box-body" align="center"><b style="color: #00b3ee; font-size: 18px">${msg.msg}</b></div><c:if test="${msg.replyMessages != []}"><c:forEach items="${msg.replyMessages}" var="reply"><div class="box-footer"><b style="font-family: 黑體"><fmt:formatDate value="${reply.createTime}" pattern="yyyy年MM月dd日🚀🚀HH:mm:ss"/>回復:${reply.msg}</b></div></c:forEach></c:if><c:if test="${user != null}"><div class="box-footer" style="text-align: center"><button type="button" class="btn btn-danger" data-dismiss="modal" onclick="deletemsg('${msg.id}')">刪除</button><button type="button" class="btn btn-primary" onclick="reply('${msg.id}')">回復</button>
</div></c:if></div></c:forEach>
(3)留言本鏈接跳轉
? ? ? ? a、B站課程錄播
????????在頁面的最下方添加了B站的鏈接鍵入模塊,可以通過點擊進入到該留言本的設計實現錄播視頻中,對應的B站課程錄播界面如圖2-4所示:
圖2-4?B站課程錄播界面
????????核心代碼:
<div align="center"><strong><b><b style="color: #0d6aad; margin-left: 30px">設計者:</b>于立偉<b style="color: #720e9e; margin-left: 30px">QQ郵箱:<a href="https://mail.qq.com/">3443531275@qq.com</a></b><b style="color: #720e9e; margin-left: 30px">手機號:13830758370</b><b style="color: rgba(12,32,150,0.29); margin-left: 30px">CO:啟 <img src="./image/logoYW.jpg" style="border-radius: 50%" width="20px" height="20px"/> 航</b><b style="color: #720e9e; margin-left: 30px">B站視頻號:<a href="https://www.bilibili.com/video/BV1mh4y1M7id/">尾鯉魚</a></b></b></strong></div>
? ? ? ? b、QQ郵箱發布
????????在頁面的最下方添加了QQ郵箱的鏈接鍵入模塊,可以通過點擊進入到QQ郵箱進行相關信息內容的上傳發布操作,對應的QQ郵箱發布界面如圖2-5所示:
圖2-5?QQ郵箱發布界面
????????核心代碼:
<div align="center"><strong><b><b style="color: #0d6aad; margin-left: 30px">設計者:</b>于立偉<b style="color: #720e9e; margin-left: 30px">QQ郵箱:<a href="https://mail.qq.com/">3443531275@qq.com</a></b><b style="color: #720e9e; margin-left: 30px">手機號:13830758370</b><b style="color: rgba(12,32,150,0.29); margin-left: 30px">CO:啟 <img src="./image/logoYW.jpg" style="border-radius: 50%" width="20px" height="20px"/> 航</b><b style="color: #720e9e; margin-left: 30px">B站視頻號:<a href="https://www.bilibili.com/video/BV1mh4y1M7id/">尾鯉魚</a></b></b></strong></div>
3、留言本登錄模塊功能實現
(1)留言本登錄驗證
? ? ? ? a、賬號密碼驗證失敗
????????在用戶進行留言本登錄的時候,通過用戶在輸入框中輸入的信息進行對應的輸入內容校驗,并將不符合的信息進行輸出提示,對應的賬號密碼驗證失敗界面如圖3-1所示:
圖3-1?賬號密碼驗證失敗界面
????????核心代碼:
$('#login_form').bootstrapValidator({excluded: [':disabled', ':hidden', ':not(:visible)'],//默認指定不驗證的情況message : 'This value is not valid',feedbackIcons : {valid : 'glyphicon glyphicon-ok',invalid : 'glyphicon glyphicon-remove',validating : 'glyphicon glyphicon-refresh'},fields : {name: { ?/*鍵名username和input name值對應*/message: '用戶名不能為空',validators: {notEmpty: { /*非空提示*/message: '用戶名必填不能為空'},stringLength: { /*長度提示*/min: 3,max: 30,message: '用戶名長度不能小于3位或超過30位'},regexp: { /*正則校驗*/regexp: /^[a-zA-Z0-9_\.]+$/,message: '用戶名只能由字母、數字、點和下劃線組成。'},}},password: {message:'密碼無效',validators: {notEmpty: {message: '密碼不能為空'},stringLength: {min: 3,max: 15,message: '密碼長度必須在3到15之間'}}},}});
? ? ? ? b、賬號密碼驗證成功
????????用戶將登錄信息全部按照登錄提示修改后會在每個文本框的最后出現綠色的小勾,從而表示輸入信息均已正確,對應的賬號密碼驗證成功界面如圖3-2所示:
圖3-2?賬號密碼驗證成功界面
????????核心代碼:
name: { ?/*鍵名username和input name值對應*/message: '用戶名不能為空',validators: {notEmpty: { /*非空提示*/message: '用戶名必填不能為空'},stringLength: { /*長度提示*/min: 3,max: 30,message: '用戶名長度不能小于3位或超過30位'},regexp: { /*正則校驗*/regexp: /^[a-zA-Z0-9_\.]+$/,message: '用戶名只能由字母、數字、點和下劃線組成。'},}},password: {message:'密碼無效',validators: {notEmpty: {message: '密碼不能為空'},stringLength: {min: 3,max: 15,message: '密碼長度必須在3到15之間'}}}
(2)留言本登錄成功
????????登錄內容全部輸入成功后即可進行對應賬號的登錄操作,對應的留言本登錄成功界面如圖3-3所示:
圖3-3?留言本登錄成功界面
????????核心代碼:
@RequestMapping("/login.do")public void login(HttpServletRequest request, HttpServletResponse response) {try {request.setCharacterEncoding("UTF-8");String name = request.getParameter("name");String password = request.getParameter("password");User user = userService.login(name, password);request.getSession().setAttribute("user", user);if (Objects.nonNull(user)) {JSONUtil.printByJSON(response, Result.success());}JSONUtil.printByJSON(response, Result.fail());} catch (UnsupportedEncodingException e) {e.printStackTrace();}}
(3)留言本登錄退出
????????用戶發布完畢自己的留言信息后可以點擊頁面右上角自己的用戶名進行登錄退出的操作,對應的留言本登錄退出界面如圖3-4所示:
圖3-4?留言本登錄退出界面
????????核心代碼:
@RequestMapping("/out.do")public void out(HttpServletRequest request, HttpServletResponse response) {request.getSession().removeAttribute("user");JSONUtil.printByJSON(response, Result.success());}$('#login_form').bootstrapValidator({excluded: [':disabled', ':hidden', ':not(:visible)'],//默認指定不驗證的情況message : 'This value is not valid',feedbackIcons : {valid : 'glyphicon glyphicon-ok',invalid : 'glyphicon glyphicon-remove',validating : 'glyphicon glyphicon-refresh'}
4、留言本發布留言模塊功能實現
(1)留言本發布留言內容驗證
? ? ? ? a、昵稱驗證失敗
????????用戶點擊發布留言后會彈出對應的發布留言信息彈窗,在對應的輸入框中按照提示信息填入自己的信息和留言內容即可,如果自己的昵稱輸入有問題則會提示“輸入內容必須為字母、數字、點和下劃線”,對應的昵稱驗證失敗界面如圖4-1所示:
圖4-1?昵稱驗證失敗界面
????????核心代碼:
fields : {nickname: { ?/*鍵名username和input name值對應*/validators: {notEmpty: { /*非空提示*/message: '用戶名必填不能為空'},StringLength: { /*長度提示*/min: 3,max: 30,message: '用戶名長度不能小于3位或超過30位'},regexp: { /*正則校驗*/regexp: /^[a-zA-Z0-9_\.]+$/,message: '用戶名只能由字母、數字、點和下劃線組成。'},}}
? ? ? ? b、郵箱驗證失敗
????????如果自己的郵箱輸入框中沒有填寫郵箱號的話會提示“郵箱不能為空”,對應的郵箱驗證失敗界面如圖4-2所示:
圖4-2?郵箱驗證失敗界面
????????核心代碼:
qq: {validators: {notEmpty: {message: 'qq不能為空'},digits:{ // 純數字驗證message: 'qq只能是數字'},stringLength: {min: 3,max: 15,message: 'qq長度必須在3到15之間'}}},email: {validators: {notEmpty: {message: '郵箱不能為空'},emailAddress:{ // 郵箱驗證message: '請輸入正確的郵箱'},stringLength: {min: 3,max: 15,message: 'qq長度必須在3到15之間'}}}
? ? ? ? b、發布留言內容驗證成功
????????用戶將留言信息全部按照留言信息提示修改后會在每個文本框的最后出現綠色的小勾,從而表示輸入信息均已正確,對應的發布留言內容驗證成功界面如圖4-3所示:
圖4-3?發布留言內容驗證成功界面
????????核心代碼:
msg : {validators : {notEmpty : {message : '留言內容必填'},stringLength : {min : 2,max : 200,message : '留言長度必須2-200字符'}}}
(2)留言本留言發布
? ? ? ? a、留言本留言信息
????????將必須要填寫的個人信息填寫無誤后即可進行留言內容的填寫,將對應的留言內容填寫到留言內容輸入框中即可,對應的留言本留言信息界面如圖4-4所示:
圖4-4?留言本留言信息界面
????????核心代碼:
@RequestMapping("/insert.do")public void insert(HttpServletRequest request, HttpServletResponse response) {try {request.setCharacterEncoding("UTF-8");String nickname = request.getParameter("nickname");String qq = request.getParameter("qq");String email = request.getParameter("email");String msg = request.getParameter("msg");Message message = new Message();message.setEmail(email);message.setMsg(msg);message.setNickname(nickname);message.setQq(qq);message.setType(true);messageService.insert(message);JSONUtil.printByJSON(response, Result.success());} catch (UnsupportedEncodingException e) {e.printStackTrace();}}@Overridepublic void insert(Message message) {SqlSession sqlSession = MybatisUtils.getSqlsession();MessageMapper mapper = sqlSession.getMapper(MessageMapper.class);mapper.insert(message);sqlSession.commit();sqlSession.close();}
? ? ? ? b、留言本留言發布成功
????????留言信息填寫完畢后即可點擊彈窗中的提交留言按鈕進行留言信息的發布操作,對應的留言本留言發布成功界面如圖4-5所示:
圖4-5?留言本留言發布成功界面
????????核心代碼:
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content" style="background-image: url('../image/background.png')"><div class="modal-header"><h2 class="modal-title" id="exampleModalLabel" align="center" style="color: #720e9e">發布留言</h2></div><div class="modal-body"><form id="msg_form"><div class="form-group"><label for="nickname">昵稱</label><input style="background-color: #d3dcda" type="text" class="form-control" placeholder="請輸入您的昵稱" id="nickname" name="nickname" aria-describedby="emailHelp"></div><div class="form-group"><label for="QQ">QQ</label><input style="background-color: #d3dcda" type="text" class="form-control" placeholder="請輸入您的QQ號" id="qq" name="qq"></div><div class="form-group"><label for="email">郵箱</label><input style="background-color: #d3dcda" type="text" class="form-control" placeholder="請輸入您的郵箱號" id="email" name="email"></div><div class="form-group"><label for="msg">內容</label><textarea style="background-color: #d3dcda" class="form-control" id="msg" placeholder="請輸入發表的內容信息" name="msg" rows="3"></textarea></div></form></div><div class="modal-footer" style="text-align: center"><button type="button" class="btn btn-secondary" data-dismiss="modal">關閉</button><button type="button" class="btn btn-primary" id="send_btn">發布留言</button></div></div></div></div>
5、留言本留言回復模塊功能實現
(1)留言本留言回復信息
????????用戶登錄留言本后可以對所有的留言信息進行回復評論操作,點擊留言框中的回復按鈕即可進行回復內容的填寫,對應的留言本留言回復信息界面如圖5-1所示:
圖5-1?留言本留言回復信息界面
????????核心代碼:
@RequestMapping("/reply.do")public void reply(HttpServletRequest request, HttpServletResponse response) {try {request.setCharacterEncoding("UTF-8");String id = request.getParameter("id");String msg = request.getParameter("replyMsg");Message message = new Message();message.setReplyId(Integer.parseInt(id));message.setMsg(msg);message.setType(false);messageService.insert(message);JSONUtil.printByJSON(response, Result.success());} catch (Exception e) {e.printStackTrace();}}@Overridepublic void insert(Message message) {SqlSession sqlSession = MybatisUtils.getSqlsession();MessageMapper mapper = sqlSession.getMapper(MessageMapper.class);mapper.insert(message);sqlSession.commit();sqlSession.close();}
(2)留言本留言回復發布成功
????????回復內容填寫完畢后即可點擊回復彈窗中的發布按鈕進行回復信息的發布,對應的留言本留言回復發布成功界面如圖5-2所示:
圖5-2?留言本留言回復發布成功界面
????????核心代碼:
$("#reply_btn").click(function () {let txt = $("#reply_form").serialize()let id = $("#id").val()let data = txt + '&id=' + idfetch("/message/reply.do", {method:"post",headers:{'Content-type':'application/x-www-form-urlencoded'},body:data}).then(res => {return res.json()}).then(data => {if (data.success) {location.reload()$('#replyModal').modal('hide')}})})
6、留言本刪除留言模塊功能實現
(1)留言本留言刪除驗證
????????如果自己的留言發布后感覺有問題需要刪除只需要點擊留言框中的刪除按鈕進行留言刪除即可,但是為了確保無誤刪除時需要進行刪除驗證操作,對應的留言本留言刪除驗證界面如圖6-1所示:
圖6-1?留言本留言刪除驗證界面
????????核心代碼:
@RequestMapping("/delete.do")public void delete(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {request.setCharacterEncoding("UTF-8");String id = request.getParameter("id");messageService.deleteById(Integer.parseInt(id));JSONUtil.printByJSON(response,Result.success());}@Overridepublic void deleteById(int parseInt) {SqlSession sqlSession = MybatisUtils.getSqlSession();MessageMapper mapper = sqlSession.getMapper(MessageMapper.class);mapper.deleteByPrimaryKey(parseInt);mapper.deleteByReplyId(parseInt);sqlSession.commit();sqlSession.close();}
(2)留言本留言刪除成功
????????如果確認要刪除該條留言的話在二次確認的窗口中點擊確認按鈕即可進行該條記錄的刪除操作,對應的留言本留言刪除成功界面如圖6-2所示:
圖6-2?留言本留言刪除成功界面
????????核心代碼:
function deleteModal(id) {mid = id;$("#deleteModal").modal('show')}$("#delete_btn").click(function () {let data = 'id='+midfetch("/message/delete.do",{method:"post",headers:{'Content-type':'application/x-www-form-urlencoded'},body:data}).then(res=>{return res.json()}).then(data =>{if (data.success) {location.reload()$('#deleteModal').modal('hide')}})});
五、遇到的問題和解決方法
????????1、運行問題:啟動Tomcat的過程中,出現端口被占用的情況。
解決方法:對服務器進行配置,將服務器運行的端口號改為別的端口即可(找到Tomcat安裝目錄下的文件“/conf/server.xml”->使用記事本或寫字板打開文件,在文件中找到“Connector port=8080”->將“8080”改為“8888”,然后保存配置文件->重啟Tomcat服務器)。
????????2、運行問題:代碼編寫完成后進行運行發現網頁無法進行頁面加載,顯示頁面請求失敗。
解決方法:由于沒有在Tomcat服務器上進行運行所導致,先運行服務器然后再運行代碼后頁面可以正常加載。
????????3、項目問題:JSP頁面中遇到編碼問題。
解決方法:可以先檢查JSP頁面、JavaBean以及數據庫的編碼設置是否一致,可以手動在代碼中設置編碼格式,也可以在web.xml文件中配置全局的編碼過濾器。
????????4、項目問題:JSP頁面無法正確地顯示數據。
解決方法:檢查JSP頁面中是否包含錯誤的HTML標簽、CSS樣式或JavaScript代碼,這些代碼可能會干擾數據的顯示,也可以檢查JavaBean中的數據是否被正確地存儲、處理和輸出。
????????5、項目問題:JSP頁面無法獲取到JavaBean中的數據。
解決方法:確保JavaBean中需要獲取的數據已經被正確地賦值,可以在JSP頁面中使用EL表達式或者使用Java代碼片段的方式獲取數據。
????????6、項目問題:JSP頁面中的表單無法提交。
解決方法:檢查表單中的請求方法是否正確,是否存在未填寫的必填項,是否存在重復的表單參數等錯誤,同時也可以檢查網絡連接是否正常。
????????7、項目問題:頁面跳轉異常。
解決方法:檢查代碼實現,確保頁面跳轉的 URL 是否正確,是否遺漏了必要的轉發或者重定向操作;另外還可以通過在瀏覽器中查看控制臺日志來定位問題。
????????8、項目問題:請求參數獲取失敗。
解決方法:檢查代碼實現,確保請求參數的名稱、類型和格式都與服務器端代碼中一致,還可以通過在瀏覽器中查看網絡請求信息來定位問題。
????????9、項目問題:項目運行后頁面出現了404錯誤。
解決方法:由于在連接數據庫的配置文件中數據庫名錯誤導致的,將數據庫的名字修改為自己的數據庫名稱后再次啟動錯誤消息。
????????10、項目問題:項目運行后頁面出現了500錯誤。
解決方法:由于沒有把類名寫到配置文件的中,所以Tomcat就找不該類,此時我們把類名加入進去就可以正常訪問了。
六、心得體會
????????1、基于MyBatis的留言本項目為我提供了寶貴的軟件開發和數據庫操作經驗,通過這個項目我深入了解了MyBatis這一優秀的持久層框架,并在實踐中獲得了一些獨特的見解。MyBatis的靈活性和強大性給我留下了深刻的印象,它支持定制化SQL、存儲過程以及高級映射,這使得開發者可以更加便捷地操作數據庫。
????????2、利用MyBatis的映射特性,將數據庫表中的字段與Java對象進行了對應,通過使用MyBatis提供的映射文件,我可以輕松地實現對數據庫的增、刪、改、查等操作。此外MyBatis還支持動態SQL,可以在運行時根據參數動態生成SQL語句,使得操作數據庫更加靈活。
????????3、在開發過程中,由于留言本項目的數據量較大,如果直接使用MyBatis的默認查詢方式,可能會影響性能。為了解決這個問題我研究了MyBatis提供的分頁查詢功能,通過在SQL語句中加入分頁參數,MyBatis可以自動生成對應的分頁SQL語句,大大提高了查詢效率。
????????4、由于數據庫表結構經常變化,我需要頻繁地更新MyBatis的映射文件,為了解決這個問題我深入研究了MyBatis的動態映射特性。通過在映射文件中使用動態SQL語句,我可以根據數據庫表的實際結構自動生成對應的映射文件,避免了因表結構變化而導致的錯誤。
????????5、制作基于MyBatis留言本的項目讓我深入了解了MyBatis框架的使用和原理,同時也在實踐中獲得了寶貴的經驗。在這個過程中我不僅學會了如何使用MyBatis進行數據庫操作,還學會了如何解決實際開發中遇到的問題。通過這個項目我深刻體會到了MyBatis在持久層框架中的優勢以及在項目開發中的重要性。