JAVA Spring MVC+Mybatis Spring MVC的工作流程*,多表連查

目錄

注解總結

將傳送到客戶端的數據轉成json數據

**描述一下Spring MVC的工作流程**


1。屬性賦值

BeanUtils.copyProperties(addUserDTO,user);

添加依賴:
?? ?spring web、mybatis framework、mysql driver

@Controller和@ResponseBody優化


直接改成@RestController,每個方法上,就不需要加@ResponseBody

@RestController是組合注解,就等于:@Controller + @ResponseBody

@RequestMapping作用在類上,(value = "/v1/users/"),表示公共路徑

添加該注解后,所有的接口上,不用再添加@Mapper注解了

防止自動裝配@Autowired UserMapper userMapper;報錯,可以添加value=false,表示不管是否裝配成功,都不會不錯

注解總結

????????@Controller 注解
????????標注一個類;
????????表示該類是一個控制器,負責處理用戶的請求,并將處理結果生成響應返回給客戶端。


????????@RequestMapping 注解
????????請求注解;
????????添加在控制器類或控制器方法上;
????????將HTTP請求映射到控制器中的方法,指定處理請求的路徑
????????控制器類上:為整個控制器指定一個基礎路徑
????????控制器方法上:指定相對于基礎路徑的具體路徑


????????@ResponseBody 注解
????????響應注解;
????????添加在控制器方法上;
????????可以使控制器方法通過返回值的方式將響應返回給客戶端。

????????@RestController 注解
????????作用于類上;
????????作用是將類中的方法返回值直接作為HTTP響應的內容;
????????在控制器類中加入該注解后,無需在每個方法上添加 @ResponseBody 注解;
????????可以讓Spring框架自動將方法的返回值序列化并填充到HTTP響應中,實現Web服務端點的快速???????

????????開發。
????????

????????@MapperScan 注解說明
????????添加在 Spring配置類 上;
????????用于告訴 Spring 掃描 MyBatis Mapper 接口并創建對應的 Mapper 實現;
????????可以指定掃描 MyBatis 映射器接口的包名。

將傳送到客戶端的數據轉成json數據,使用@ResponseBody或@RestController

**描述一下Spring MVC的工作流程**

????????1. 客戶端發送請求至前端控制器DispatcherServlet
????????2. DispatcherServlet收到請求后,調用處理器映射器HandlerMapping
????????3. HandlerMapping根據請求URL找到具體的Controller。
????????4. Controller處理請求,并返回ModelAndView,其中的View只是視圖名,并不指向具體的視圖

????????組件
????????5. DispatcherServlet通過ViewReslover(視圖解析器)確定負責顯示數據的具體View
????????6. DispatcherServlet對View進行渲染視圖(即將Model填充至視圖組件中),并將完整的視圖

????????響應到客戶端

指定post請求方法:

    @RequestMapping(value = "insert",method = RequestMethod.POST)
//    @ResponseBodypublic String addUser(AddUserDTO addUserDTO){User user=new User();BeanUtils.copyProperties(addUserDTO,user);user.setCreated(new Date());userMapper.insertUser(user);return "添加成功";}

? ? ? ? 或者:@PostMapping(value = "insert"),是一樣的效果,只接受post請求

@PathVariable表示路徑參數

uid 
@GetMapping("/v1/users/{uid}")
public void xxx(@PathVarable Integer uid){}

1、MyBatisConfig

//@Configuration :設置自動掃描 標識此類為配置類,工程啟動時,會自動加載此類 //@MapperScan: 1、自動掃描注解,一旦添加該注解,會為指定包路徑及子孫中所有接口添加@Mapper注解 // 2、添加該注解后,所有的接口上,不用再添加@Mapper注解了

package cn.tedu._05mvcboot02.config;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;//@Configuration :設置自動掃描 標識此類為配置類,工程啟動時,會自動加載此類
//@MapperScan: 1、自動掃描注解,一旦添加該注解,會為指定包路徑及子孫中所有接口添加@Mapper注解
//             2、添加該注解后,所有的接口上,不用再添加@Mapper注解了
@Configuration
@MapperScan(value = "cn.tedu._05mvcboot02")
public class MyBatisConfig {
}

UserController

package cn.tedu._05mvcboot02.controller;import cn.tedu._05mvcboot02.mapper.UserMapper;
import cn.tedu._05mvcboot02.pojo.dto.AddUserDTO;
import cn.tedu._05mvcboot02.pojo.entity.User;
import cn.tedu._05mvcboot02.pojo.vo.UserListVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.List;//@Controller
@RestController
@RequestMapping(value = "/v1/users/")
public class UserController {@Autowired UserMapper userMapper;@RequestMapping(value = "insert")
//    @ResponseBodypublic String addUser(AddUserDTO addUserDTO){User user=new User();BeanUtils.copyProperties(addUserDTO,user);user.setCreated(new Date());userMapper.insertUser(user);return "添加成功";}@RequestMapping(value = "userList")
//    @ResponseBodypublic List<UserListVO> getUserList(){return userMapper.getUserList();}@RequestMapping(value = "deleteUser")
//    @ResponseBodypublic String deleteUserById(Integer id){return "刪除成功"+userMapper.deleteUserById(id);}@RequestMapping(value = "update")
//    @ResponseBodypublic String updateUser(User user){return "更新成功:"+userMapper.updateUser(user);}}

UserMapper

package cn.tedu._05mvcboot02.mapper;import cn.tedu._05mvcboot02.pojo.entity.User;
import cn.tedu._05mvcboot02.pojo.vo.UserListVO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Controller;import java.util.List;@Mapper
public interface UserMapper {int insertUser(User user);List<UserListVO> getUserList();int deleteUserById(Integer id);int updateUser(User user);}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu._05mvcboot02.mapper.UserMapper"><insert id="insertUser">INSERT INTO mvcdb.user(username, password, nickname, created)VALUES (#{username}, #{password}, #{nickname}, #{created})</insert><select id="getUserList" resultType="cn.tedu._05mvcboot02.pojo.vo.UserListVO">SELECT username, passwordFROM mvcdb.user</select><delete id="deleteUserById">DELETEFROM mvcdb.userWHERE id = #{id}</delete><update id="updateUser" >UPDATE mvcdb.user<set><if test="username!=null">username=#{username}</if>,<if test="password!=null">password=#{password}</if>,<if test="nickname!=null">nickname=#{nickname}</if>,<if test="created!=null">created=#{created}</if></set>WHERE id=#{id}</update></mapper><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu._05weibo.mapper.WeiboMapper"><insert id="insert">INSERT INTO blog.weibo(content, created, user_id)VALUES (#{content}, #{created}, #{userId})</insert>獲取微博<select id="selectIndex" resultType="cn.tedu._05weibo.pojo.vo.WeiboIndexVO">SELECT w.id,w.content,u.nicknameFROM blog.user uJOIN blog.weibo w on u.id = w.user_id</select>根據id獲取詳情<select id="selectById" resultType="cn.tedu._05weibo.pojo.vo.WeiboIndexVO">SELECT w.id,w.content,w.created,u.nicknameFROM blog.user uJOIN blog.weibo w on u.id = w.user_idWHERE w.id=#{id}
</mapper>

application.properties

server.port=8080#???????
spring.datasource.url=jdbc:mysql://localhost:3306/mvcdb?characterEncodeing=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123zhang
#xml????
mybatis.mapper-locations=classpath:mappers/*.xml

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81902.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H2數據庫中一條insert語句到生成java對象到數據寫入磁盤的完整步驟

H2 數據庫將 SQL 語句轉換為磁盤存儲的全過程可以分為以下 8 個關鍵步驟&#xff0c;我們以 INSERT INTO users (id, name) VALUES (1, Alice) 為例詳細說明&#xff1a; 1. SQL 解析與語法樹生成 詞法分析&#xff1a;拆分語句為 INSERT、INTO、users 等 Token語法分析&#…

重磅升級!Google Play商店改版上線

5 月 21 日消息&#xff0c;Android Headline 今天&#xff08;5 月 21 日&#xff09;發布博文&#xff0c;報道稱在 2025 年 I/O 開發者大會上&#xff0c;谷歌宣布更新 Google Play 應用商店&#xff0c;在優化用戶體驗的同時&#xff0c;提升開發者收益。 本次更新中&…

Docker面試題(1)

什么是Docker 一個容器化平臺 形式是容器 將你的應用程序及所有依賴項打包在一起 確保應用程序在任何環境中無縫運行 什么是Docker鏡像 Docker鏡像是Docker容器的源代碼 用于創建容器 使用build命令創建鏡像 什么是 Docker容器 包括應用程序及所有的依賴項 作為操作系統的獨立進…

Ulisses Braga-Neto《模式識別和機器學習基礎》

模式識別和機器學習基礎 [專著] Fundamentals of pattern recognition and machine learning / (美)烏利塞斯布拉加&#xff0d;內托(Ulisses Braga-Neto)著 ; 潘巍[等]譯 推薦這本書&#xff0c;作者有自己的見解&#xff0c;而且提供代碼。問題是難度高&#xff0c;對于初學…

RabbitMQ的簡介

三個概念 生產者&#xff1a;生產消息的服務消息代理&#xff1a;消息中間件&#xff0c;如RabbitMQ消費者&#xff1a;獲取使用消息的服務 消息隊列到達消費者的兩種形式 隊列&#xff08;queue&#xff09;:點對點消息通信&#xff08;point-to-point&#xff09; 消息進入隊…

自動切換剪貼板路徑中反斜杠為正斜杠

有時候需要將我們常見的win全路徑中反斜杠為正斜杠&#xff0c;每次用記事本&#xff0c;編輯替換非常麻煩&#xff0c;于是寫了這個工具&#xff0c;能自動修改剪貼板中的數據&#xff0c;只需要運行一下即可。 實現效果&#xff0c;將類似于下面的路徑&#xff1a; C:\User…

【時時三省】Python 語言----文件

目錄 1,文件打開 2, 文件關閉 3, 文件寫入 4, 文件讀出 5, 文件定位 6, 文件重命名 7, 復制文件 山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省 1,文件打開 file = open(file, mode, buffering, encoding, errors, newline, closefd, opener) 2, 文…

React 個人筆記 Hooks編程

作用 配合函數式編程&#xff0c;保證在不產生類的時候完成一個整體的組件 常用組件 useStateuseContextuseReduceruseEffectuseMemouseCallback 前三個值為自變量 后三者為因變量 前三者相當于其他編程函數的變量聲明&#xff0c;而后三者相當于對變量進行了(if now ! pr…

logits是啥、傅里葉變換

什么是logtis&#xff1f; 在深度學習的上下文中&#xff0c;logits 就是一個向量&#xff0c;下一步通常被投給 softmax/sigmoid 的向量。。 softmax的輸出是分類任務的概率&#xff0c;其輸入是logits層。 logits層通常產生-infinity到 infinity的值&#xff0c;而softmax層…

Adobe Illustrator學習備忘

1.移動畫板&#xff1a;需按住空格鍵加鼠標一塊才能拖動 2.放大縮小畫板&#xff1a;按住Alt鍵加鼠標滾輪 3.撤回&#xff1a;CtrlZ 4.鋼筆練習網站&#xff1a;The Bzier Game

【初識】內網滲透——基礎概念,基本工具使用

目錄 一、域&#xff0c;工作組&#xff0c;域控制器&#xff0c;活動目錄相關概念&#xff1a; 域環境&#xff1a; 工作組&#xff1a; 域控制器DC&#xff1a; 活動目錄AD&#xff1a; 二、內網的基本場景&#xff1a; 三、內網滲透基本測試方案&#xff1a; #案例1一基本信…

remove_const的工作原理及c++的類型推導

author: hjjdebug date: 2025年 05月 21日 星期三 12:51:57 CST descrip: remove_const的工作原理及c的類型推導 文章目錄 1. 簡單的程序代碼.2.std::remove_const_t 到底是怎樣工作的&#xff1f;2.1 測試代碼2.2 類型推導的調試手段.2.2.1 給類模板添加成員函數,讓它打印信息…

人臉識別,使用 deepface + api + flask, 改寫 + 調試

1. 起因&#xff0c; 目的&#xff0c; 感受: github deepface 這個項目寫的很好&#xff0c; 繼續研究使用這個項目&#xff0c;改寫 api。增加一個前端 flask app 2. 先看效果 3. 過程: 大力改寫原始項目中 api 這部分的代碼&#xff0c; 原始項目的文件結構太繁雜了: 我把…

三維表面輪廓儀的維護保養是確保其長期穩定運行的關鍵

三維表面輪廓儀是一種高精度測量設備&#xff0c;用于非接觸式或接觸式測量物體表面的三維形貌、粗糙度、臺階高度、紋理特征等參數。其主要基于光學原理進行測量。它利用激光或其他光源投射到被測物體表面&#xff0c;通過接收反射光或散射光&#xff0c;結合計算機圖像處理技…

Lambda表達式的高級用法

今天來分享下Java的Lambda表達式&#xff0c;以及它的高級用法。 使用它可以提高代碼的簡潔度&#xff0c;使代碼更優雅。 一、什么是lambda表達式 Lambda 表達式是 Java 8 引入的特性&#xff0c;用于簡化匿名內部類的語法&#xff0c;使代碼更簡潔&#xff0c;尤其在處理函…

31-35【動手學深度學習】深度學習硬件

1. CPU和GPU 1.1 CPU CPU每秒鐘計算的浮點運算數為0.15&#xff0c;GPU為12。GPU的顯存很低&#xff0c;16GB&#xff08;可能32G封頂&#xff09;&#xff0c;CPU可以一直插內存。 左邊是GPU&#xff08;只能做些很簡單的游戲&#xff0c;視頻處理&#xff09;&#xff0c;中…

【MySQL成神之路】MySQL常見命令匯總

目錄 MySQL常用命令總結 1. 數據庫操作 2. 表操作 3. 數據操作&#xff08;DML&#xff09; 4. 索引與優化 5. 用戶與權限管理 6. 備份與恢復 7. 事務控制 8. 常用函數 9. 系統狀態與日志 總結 MySQL常用命令總結 MySQL作為最流行的關系型數據庫之一&#xff0c;提供…

Dify的大語言模型(LLM) AI 應用開發平臺-本地部署

前言 今天閑著&#xff0c;搗鼓一下 Dify 這個開源平臺&#xff0c;在 mac 系統上&#xff0c;本地部署并運行 Dify 平臺&#xff0c;下面記錄個人在本地部署Dify 的過程。 Dify是什么&#xff1f; Dify是一個開源的大語言模型&#xff08;LLM&#xff09;應用開發平臺&#…

【論文閱讀】針對BEV感知的攻擊

Understanding the Robustness of 3D Object Detection with Bird’s-Eye-View Representations in Autonomous Driving 這篇文章是發表在CVPR上的一篇文章&#xff0c;針對基于BEV的目標檢測算法進行了兩類可靠性分析&#xff0c;即惡劣自然條件以及敵對攻擊。同時也提出了一…

SonarQube的核心作用與用途

SonarQube作為一個開源的代碼質量管理平臺&#xff0c;致力于持續分析代碼的健康狀態&#xff0c;幫助開發團隊提升代碼質量。以下是其核心作用與用途的詳細說明&#xff1a; 1、靜態代碼分析 SonarQube通過靜態代碼分析技術&#xff0c;自動識別代碼中的潛在問題。它能夠檢測…