Mybatis(javaweb第九天)

Mybatis基礎操作

占位符:#{變量名}

注意事項:如果Mapper接口方法只有一個普通類型參數,屬性名可以隨便寫

==> Preparing: delete from emp where id=?
==> Parameters: 1(Integer)
預編譯SQL
不會將值直接放在SQL語句中,而是用占位符?代替
之后執行這條SQL語句,如果除了?其他相同,就可以直接拼接值執行

普通SQL語句執行流程
SQL語法解析檢查->優化SQL->編譯SQL->執行SQL

提供緩存:如果執行的語句在緩存中,可以跳過前三步

SQL注入:通過操作輸入的數據來修改事先定義好的SQL語句

預編譯SQL優點:
性能高(跳過前三步)
更安全(防止SQL注入)(傳入的只會被理解為值不會認為是SQL語句的一部分)

在mybatis中#{}和${}都可以表示占位符
但是效果不同

#{}:將#{}替換為?生成預編譯SQL,會自動設置參數值
傳參數時使用

${}:拼接SQL,將參數直接拼接在SQL中,存在SQL注入問題
對表名,列表進行動態設置時使用

#{}會自動類型轉換,因此不需要加引號

主鍵返回:

在數據添加成功后,需要獲取插入數據庫數據的主鍵。

實現:
添加注解@Options(keyProperty=“id”,useGeneratedKeys=true)

數據封裝

實體類屬性名和數據庫查詢返回的字段名一致,Mybatis自動封裝
如果實體類屬性名和數據庫表查詢返回的字段名不一致,不能自動封裝

解決方案一:
起別名:讓別名與實體屬性一致

@Select("select id, username, password, name, gender, image, job, entrydate, dept_id deptId, create_time createTime, update_time updateTime from emp where id=#{id}")
public Emp select(Integer id);

方案二:
通過@Results,@Result注解手動映射封裝

@Results({@Result(column="dept_id",property = "deptId"),@Result(column="create_time",property = "createTime"),@Result(column="update_time",property = "updateTime")})@Select("select * from emp where id=#{id}")public Emp select(Integer id);

方案三:
開啟mybatis駝峰命名自動映射開關
在properties中配置

@Select("select * from emp where id=#{id}")public Emp select(Integer id);
mybatis.configuration.map-underscore-to-camel-case=true

MySQL 用下劃線命名是因為系統兼容性 + 數據庫傳統風格的雙重原因,不是不能用駝峰,而是駝峰容易出錯、不推薦。

所以命名并不是沒用,嚴格按照數據庫下劃線,java駝峰

小點:#{}不能出現在’‘之內,因為會被?替代,在’'內會被認為是字符
可以使用${}直接拼接

XML映射文件

將SQL語句與java代碼分別編寫
規范:
XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下
XML映射文件的namespace屬性為Mapper接口全限定名一致
XML映射文件中sql語句的id與Mapper接口中的方法名一致,并保持返回類型一致

? 為什么把配置文件放在 resources 下?
Spring Boot 啟動時默認會在 classpath 下找配置文件。

src/main/resources 會自動被打包到編譯后的 target/classes/ 目錄中,與 .class 文件在一起。

也就是說,它不是因為 Java 編譯放進來了,而是因為資源目錄本身就會被打包進 classpath。

使用注解還是XML:

注解:完成簡單的增刪改查
XML:實現復雜的SQL功能

mybatis動態SQL

通過標簽實現

<if>:用于判斷條件是否成立,使用test屬性進行條件判斷,如果條件為true,則拼接
<if test="name!=null">SQL語句
<if><where>:用于動態生成where(條件不為空生成),自動去除條件前面多余的and、or
<set>:自動去除語句后多余的, 用于更新語句<foreach>:
屬性:
collection:遍歷的集合
item:遍歷的元素
separator:分隔符
open:遍歷開始前拼接的SQL片段
close:遍歷結束后拼接的SQL片段<sql><include>:提高代碼復用<sql id="名字">SQL語句<sql>
<include refid="名字">

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

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

相關文章

C#開發MES管理系統源碼工業生產線數據采集WPF上位機產線執行系統源碼

該源碼是實際生產線運行的實際項目&#xff0c;全套源碼。適合開發者學習參考&#xff0c;有需要源碼可以聯系博主

`ngx_otel_module` NGINX OpenTelemetry 分布式追蹤實戰

1. 模塊簡介 ngx_otel_module 為 NGINX&#xff08;開源版 1.25.3&#xff0c;商業版 1.23.4&#xff09;提供了 OpenTelemetry&#xff08;OTel&#xff09;分布式追蹤支持&#xff0c;能夠&#xff1a; 自動采集 HTTP 請求的生命周期 Span上下文傳播&#xff1a;兼容 W3C t…

Vue+TypeScript 枚舉(Enum)的使用規范

在 TypeScript 中&#xff0c;枚舉&#xff08;Enum&#xff09;的命名應遵循以下規范&#xff0c;這些規范結合了 TypeScript 官方建議和行業最佳實踐&#xff1a; 枚舉命名規范&#xff08;TypeScript/Vue 項目&#xff09; 基本命名規則&#xff1a; 使用 PascalCase&#…

一個完整的LSTM風光發電預測與并網優化方案,包含數據處理、模型構建、訓練優化、預測應用及系統集成實現細節

以下是一個完整的LSTM風光發電預測與并網優化方案,包含數據處理、模型構建、訓練優化、預測應用及系統集成實現細節: 風光發電功率預測與并網優化系統 基于LSTM的時間序列預測與儲能協同控制 第一部分:系統架構設計(1200字) 1.1 整體技術路線 #mermaid-svg-U5pxzefmzZ4s…

如何在 MX Linux 上安裝 Mint 的 Cinnamon 桌面 UI

如何在 MX Linux 上安裝 Mint 的 Cinnamon 桌面 UI 你是否想在 MX Linux 上安裝流行的 Linux Mint Cinnamon 圖形用戶界面?那么這里有一個教程…… Cinnamon 是一個類似 Windows 7 的界面,它默認安裝在 Linux Mint 操作系統中。它使 Mint 非常易于理解和使用,這也是 Mint …

OpenStack 入門

目錄 簡介 一、云計算與 OpenStack 基礎概念 1.1 云計算概述 1.2 OpenStack 簡介 二、OpenStack 單機環境部署 2.1 環境準備 2.2 部署前準備工作 2.3 在線部署 OpenStack&#xff08;Train 版本&#xff09; 三、通過 Dashboard 部署 OpenStack 的功能 3.1 登錄 Dash…

【Git】關于項目開發分支的使用規范

背景 在項目開發過程中&#xff0c;往往一個優秀的產品都會出現不斷的版本迭代&#xff0c;我時常在項目發布后對于如何結合后續更新的業務場景在分支上的應用沒有一個很好的辦法&#xff0c;一直也比較苦惱。目前項目的迭代場景如下&#xff0c;一個A項目&#xff0c;經過需求…

msquic的windows版本編譯

首先確保安裝cmake和powershell&#xff08;需要6以上&#xff0c;本人升級到了7.5&#xff09;&#xff0c;vs&#xff08;本人用的vs2022&#xff09; powershell&#xff0c;默認是5&#xff0c;會編譯不成功&#xff0c;所以附帶一個升級的流程 $PSVersionTable.PSVersion …

批量文件重命名工具 OncePower ,永久免費!

軟件介紹 適用于Windows OncePower是一款Windows批量重命名工具&#xff0c;支持基本及高級匹配重命名&#xff0c;無需復雜正則。特色包括匹配修改、長度截取、日期命名、前綴后綴修改及TXT文件導入。支持保留特定內容、批量移動文件和刪除空文件夾。可保存設置&#xff0c;…

Python入門Day6.1:異常處理

一、什么是異常&#xff08;Exception&#xff09;&#xff1f; 異常是指程序運行過程中出現的錯誤情況。比如&#xff1a; 打開一個不存在的文件0作為除數列表索引越界類型轉換失敗 二、基本結構&#xff1a;try...except try:# 可能出錯的代碼 except 錯誤類型:# 出錯時執…

C++中的標準模板(STL)

C中的核心標準模板包含&#xff1a;容器、迭代器、算法、函數對象、適配器。 1.容器 容器提供了各種數據結構&#xff0c;包括向量(vector)、鏈表(list)、隊列(queue)、棧(stack)、集合(set)、映射(map)等&#xff0c;可以根據實際需求選擇合適的容器。 容器分為三大類&…

excel 待辦日歷軟件(需要宏)特別推薦

Excel待辦日歷軟件是一款基于Excel表格的日程管理工具&#xff0c;能夠幫助用戶更高效地管理待辦事項和日程安排。用戶可以在軟件中創建不同的任務列表&#xff0c;以便更好地進行管理和跟蹤。軟件還提供了日歷視圖&#xff0c;用戶可以直觀地查看和安排每日的任務&#xff0c;…

激活函數-sigmoid、tanh、relu、softmax對比

激活函數是神經網絡的核心組件&#xff0c;用于引入非線性特性&#xff0c;使網絡能夠學習復雜模式。以下從定義、作用、分類及應用場景進行詳細解析&#xff1a; &#x1f50d; ??一、定義?? 激活函數&#xff08;Activation Function&#xff09;是作用于神經元輸出的?…

三步走實現嵌入式硬件與軟件開發

目錄 ? 一、嵌入式硬件與軟件的邊界(為你后面每階段安排任務打基礎) ? 二、三階段開發策略規劃(以你的三步走為主線) ??階段1:確定能做 → 外包技術顧問協助選型 + 需求拆解 + 采購建議 適用角色 關鍵目標 如何管理? 工具推薦 ??階段2:會做一些 → 小范圍…

ubuntu運行cursor

一.CURSOR官網下載AppImage文件 https://www.cursor.com/en/download 二、解壓 AppImage 繞過掛載機制 解決&#xff1a;默認使用Cursor.AppImage 會自動掛載臨時目錄在/tmp目錄下&#xff0c;出現沒有權限掛載的報錯問題 若掛載點仍不可寫&#xff0c;直接解壓 AppImage 運…

PTA天梯賽L1 071-080題目解析

目錄 1.L1-071 前世檔案 2.L1-072 刮刮彩票 3.L1-073 人與神 4.L1-074 兩小時學完C語言 5.L1-075 強迫癥 6.L1-076 降價提醒機器人 7.L1-077 大笨鐘的心情 8.L1-078 吉老師的回歸 9.L1-079 天梯賽的善良 10.L1-080 乘法口訣數列 1.L1-071 前世檔案 解析&#xff1a;…

git常用操作 --- idea編譯器 --- 公司實戰版

前言 雖然git的命令方式很靈活,但是還是不夠人性化,不夠方便。 如果對git操作不熟練特別容易犯迷,可能敲一會命令就不知道當前在干什么了,下一步要干什么。 下面,我將演示在Java開發中使用最常用最經典的idea編譯器來進行git操作,非常人性化和方便。 如果沒有安裝git和初始…

window顯示驅動開發—流輸出階段

流輸出 (SO) 階段可以在這些頂點到達光柵器之前將頂點流式傳輸到內存。 流輸出的運行方式類似于管道中的點擊。 即使數據繼續向下流向光柵器&#xff0c;也可以打開此點擊。 通過流輸出發送的數據連接到緩沖區。 這些緩沖區可以在后續傳遞上作為管道輸入進行循環。 流輸出的一…

備份docker desktop中的opengauss數據庫

文章目錄 備份docker desktop中的opengauss數據庫一、前提條件二、備份步驟三、注意事項四、自動化備份&#xff08;可選&#xff09;五、驗證備份 備份docker desktop中的opengauss數據庫 ? 以下是在 Docker Desktop 中備份 OpenGauss 數據庫&#xff08;以你的環境為例&…

實時中值濾波 + 低通濾波 示例程序(STM32環境)

一、功能概述 本示例實現兩個濾波器&#xff1a; 中值濾波器&#xff08;Median Filter&#xff09;&#xff1a;對短期異常值&#xff08;如尖峰噪聲&#xff09;有良好的抑制能力&#xff1b;低通濾波器&#xff08;Low-Pass Filter&#xff09;&#xff1a;對數據進行平滑…