MybatisPlus-03.快速入門-常用注解

一.MP的原理

mp究竟是如何知道我們需要對哪個表進行操作,并且又是如何知道要操作哪些字段的呢?這是因為mp使用到了反射機制,我們在定義mapper接口時使其繼承了BaseMapper接口,并指定了BaseMapper接口泛型為User,因此mp可以通過掃描實體類并基于反射來找到表名為實體類名駝峰轉下劃線的表,再通過實體類中的字段和表中字段名的約定方式(如果mp遵循相關約定的話就可以找到)來找到其對應的數據庫字段。

簡單來說,就是通過反射,并且約定大于配置。

那么要使用mp要遵循哪些約定呢?

1.類名駝峰轉下劃線作為表名。

2.名為id的字段作為主鍵。

3.變量名駝峰轉下劃線作為表的字段名。

我們再定義表名和實體類的屬性時要保證相互遵循約定,才能一致。

二.常用注解

如果我們沒有遵循約定,那么我們該如何使用mp呢?這就要使用到mp為我們提供的注解了,常用的注解有以下幾個:

@TableName:當表名不是類名駝峰轉下劃線時,要在@TableName注解中指定表名。

@TableId:用來指定表中的主鍵字段信息,mp約定屬性名為id的字段作為主鍵。但是如果不叫id,那么可以通過該注解來手動指定。

特別注意:id字段不僅要指定value屬性,還要制定IdType屬性,即id的生成方式,目前有三種,AUTO:即由數據庫自增長。INPUT:由程序員自己去輸入。ASSIGN_ID:隨機分配ID,生成方式為雪花算法。

@TableField:用來指定表中的普通字段信息,如果表中的字段名不是變量名駝峰轉下劃線。那么就在該變量上手動自定表中的字段名。

三.@TableField注解的使用

@TableField注解在使用時的常見場景:

1.成員變量名和數據庫名不一致時,要使用@TableField注解來標明。

2.成員變量名以is開頭,并且是布爾值的情況下,mp會將is刪掉,把剩下的作為變量名,這樣就起不到駝峰轉下劃線的效果了,導致其與數據庫中的變量名不一樣(mp效果為married,而數據庫中為is_married)。因此碰到is開頭且類型為布爾類型的成員變量,要在其上加上@TableField注解來指定數據庫中的變量名。

3.成員變量名與數據庫關鍵字沖突,如order,這樣就需要在mp的@TableField注解中指定出來(@TableField("'order'"))

4.如果某一成員變量不是數據庫中的字段,也需要指出來,@TableField(exist = false)

四.代碼演示

package com.itheima.mp.domain.po;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.time.LocalDateTime;@Data
@TableName("tb_user")
public class User {/*** 用戶id*/@TableId(type = IdType.AUTO)private Long id;/*** 用戶名*/@TableField("'username'")private String username;/*** 密碼*/@TableField(exist = false)private String password;/*** 注冊手機號*/private String phone;/*** 詳細信息*/private String info;/*** 使用狀態(1正常 2凍結)*/private Integer status;/*** 賬戶余額*/private Integer balance;/*** 創建時間*/private LocalDateTime createTime;/*** 更新時間*/private LocalDateTime updateTime;
}

我們首先測試@TableName注解,數據庫表名為tb_user,而實體類名稱為User。我們已在實體類上加上了注解。接著我們來測試該方法:

    @Testvoid testQueryByIds() {
//        List<User> users = userMapper.queryUserByIds(List.of(1L, 2L, 3L, 4L));List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));users.forEach(System.out::println);}

成功,證明表明不一致時使用@TableName注解。

接著測試@TableId(type = IdType.AUTO),將測試方法中的testInsert方法中設置id語法注釋。

主鍵成功自增。

接著將該注解注釋掉。將測試方法中的testInsert方法中設置id語法注釋,再來測試。

package com.itheima.mp.mapper;import com.itheima.mp.domain.po.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDateTime;
import java.util.List;@SpringBootTest
class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid testInsert() {User user = new User();
//        user.setId(5L);user.setUsername("Lucy");user.setPassword("123");user.setPhone("18688990011");user.setBalance(200);user.setInfo("{\"age\": 24, \"intro\": \"英文老師\", \"gender\": \"female\"}");user.setCreateTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());
//        userMapper.saveUser(user);    引入了mybatis-plus后,很多操作即可簡化,直接調用mp提供的現成方法即可userMapper.insert(user);}@Testvoid testSelectById() {
//        User user = userMapper.queryUserById(5L);User user = userMapper.selectById(5L);System.out.println("user = " + user);}@Testvoid testQueryByIds() {
//        List<User> users = userMapper.queryUserByIds(List.of(1L, 2L, 3L, 4L));List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));users.forEach(System.out::println);}@Testvoid testUpdateById() {User user = new User();user.setId(5L);user.setBalance(20000);userMapper.updateById(user);
//        userMapper.updateUser(user);}@Testvoid testDeleteUser() {
//        userMapper.deleteUser(5L);userMapper.deleteById(5L);}
}

這樣就使用了雪花算法來進行操作,從而生成隨機的Long型id。也就是說,不設置IdType,默認使用雪花算法。?

接著測試@TableField("'? '")和@TableField(exist = false),執行以下方法:

@Testvoid testQueryByIds() {
//        List<User> users = userMapper.queryUserByIds(List.of(1L, 2L, 3L, 4L));List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));users.forEach(System.out::println);}

成功查詢出且字段以‘’標出(防止和sql語句關鍵字沖突),而且我們標記password為非數據庫字段,這里sql語句便沒有將password作為查詢條件。?

總結

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

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

相關文章

ABAP+記錄一個BDC的BUG修改過程

問題背景&#xff1a; 業務顧問反饋在使用BDC 進行MEQ1進行供應商配額時&#xff0c;由于以前錄屏時用例只有3行數據&#xff0c;導致現在有5行數據的時候&#xff0c;代碼仍然只獲取了3行數據進行錄入&#xff0c;現在需要更改代碼&#xff0c;使其按照實際情況自動調整行數。…

github上傳代碼步驟(http)

github上傳步驟&#xff08;http&#xff09; 之前github上傳不了代碼&#xff0c;總是報錯。后面發現自己用的ssh上傳需要秘鑰&#xff0c;現在我介紹一個最簡單的http上傳方法&#xff08;雖然沒有ssh安全。。。但簡單嘛~&#xff09;&#xff0c;現在我做個例子&#xff0c…

深入理解Nginx-以實際http通信例子改造帶ssl配Nginx的實戰-優雅草卓伊凡|麻子

深入理解Nginx-以實際http通信例子改造帶ssl配Nginx的實戰-優雅草卓伊凡|麻子 SSL/TLS在Nginx中的底層實現原理 Nginx的SSL模塊架構 Nginx通過ngx_http_ssl_module模塊實現SSL/TLS功能&#xff0c;該模塊基于OpenSSL庫構建。根據Nginx官方文檔&#xff0c;SSL模塊在Nginx架構…

AT6558R-5N32介紹

作為單芯片SOC方案&#xff0c;AT6558R在片上整合了射頻前端、數字基帶處理器與32位RISC CPU&#xff0c;并具備電源管理能力。該芯片兼容北斗、GPS、GLONASS三大衛星導航系統&#xff0c;可實現多模協同定位?。 主要特征 支持 BDS/GPS/GLONASS 多系統聯合定位 和單系統獨立定…

“對象創建”模式之原型模式

目錄 Prototype 原型模式動機 Motivation引例模式定義結構 Structure要點總結 Prototype 原型模式 動機 Motivation 在軟件系統中&#xff0c;經常面臨著“某些結構復雜的對象”的創建工作&#xff1b;由于需求的變化&#xff0c;這些對象經常面臨著劇烈的變化&#xff0c;但…

Tomcat服務概述

前言&#xff1a; 作為Apache軟件基金會Jakarta項目的核心成果&#xff0c;Tomcat憑借其輕量級、開源免費的特性&#xff0c;已成為Java Web應用服務的行業基準。它實現了完整的Servlet與JSP規范&#xff0c;通過模塊化架構&#xff08;Connector請求處理層與Container業務邏輯…

HarmonyOS應用開發高級認證知識點梳理 (一) 布局與樣式

以下是 HarmonyOS 應用開發中 ?布局與樣式? 的核心知識點梳理&#xff08;針對高級認證備考&#xff09;&#xff0c;結合官方文檔與高頻考點&#xff1a; 一、布局系統核心知識點 布局容器類型? 線性布局?&#xff1a;Column&#xff08;縱向&#xff09;、Row&#xf…

【Ragflow】30.離線環境遷移方案

前言 之前的 Ragflow-Plus 在服務器上穩定運行一段時間后&#xff0c;接到任務&#xff0c;要把服務遷移到一臺古老的&#xff0c;離線的windows臺式機上。 起初認為&#xff0c;下載離線安裝包&#xff0c;加載離線鏡像&#xff0c;遷移下數據就可以了。 結果坑多得意想不到…

nrf52840藍牙學習(定時器的應用)

和其他 MCU 處理器一樣&#xff0c;在 nrf52840 中定時器的功能是十分強大的。其內部包含了 5 個定時 器 TIMER 模塊 :TIMER0 、 TIMER1 、 TIMER2 、 TIMER3 、 TIMER4 &#xff0c;如下表 10.1 所示。 1. 時鐘源 首先定時器 TIMER 工作在高頻時鐘源&#xff08…

【Bluedroid】藍牙啟動之BTM_reset_complete源碼解析

當藍牙控制器完成硬件重置后,協議棧需通過一系列初始化操作恢復各模塊狀態。本文深入分析BTM_reset_complete核心函數及其調用鏈,詳解 L2CAP 連接清理、安全模塊重置、掃描參數恢復、BLE 隱私功能初始化等關鍵流程,揭示藍牙設備在重置后如何通過標準化狀態恢復確保互操作性、…

containerd 項目主要目錄簡要說明

containerd 項目結構清晰&#xff0c;核心代碼分布在若干主目錄下。以下是 client、cmd、core、internal、pkg、plugins 這六個主要包/目錄的簡要作用說明&#xff1a; 1. client 作用&#xff1a;封裝與 containerd 守護進程通信的 Go 客戶端 API&#xff0c;主要基于 gRPC。…

有線轉無線工具,輕松創建WiFi熱點

軟件介紹 今天為大家推薦一款實用的無線網絡共享工具——MyPublicWiFi。這款軟件能夠將電腦的有線網絡轉換為無線WiFi&#xff0c;方便其他設備連接使用。 安裝與設置 該軟件為安裝版程序&#xff0c;安裝完成后會自動識別當前電腦的IP地址。用戶可在軟件界面中自定義設…

Linux下,通過標準I2C驅動讀取Sensor ID

sensor型號&#xff1a;OS04L10&#xff0c;sensor引腳以及時鐘要先配置好&#xff0c;源碼如下&#xff1a; #include <fcntl.h> #include <linux/i2c-dev.h> #include <linux/i2c.h> #include <stdint.h> #include <stdio.h> #include <sy…

人工智能基石:SVM支持向量機全解析(附Python實戰)

大家好&#xff01;今天我們來深入探討支持向量機&#xff08;Support Vector Machine, SVM&#xff09;——這個在??圖像識別、文本分類??等領域廣泛應用的強大算法。既能處理分類問題&#xff0c;又能解決回歸任務&#xff0c;甚至在非線性數據面前也能游刃有余。本文將帶…

mysql查看數據庫

在 MySQL 中查看當前數據庫的創建語句&#xff0c;使用 SHOW CREATE DATABASE 命令&#xff0c;以下是詳細操作指南&#xff1a; 1. 查看當前數據庫的創建語句 SHOW CREATE DATABASE database_name; 替換 database_name 為你的數據庫名使用反引號 包裹特殊名稱或保留字 2.…

ArrayList剖析

大家天天在用List&#xff0c;ArrayList一般來講應該是程序員用的最多的集合類了。 我們今天研究一下ArrayList。 總體來講&#xff0c;從底層數據結構或者源碼的角度看&#xff0c;List比Map或者Set要簡單。 底層數據結構 ArryList其實就是可變長數組。 初始化的時候&…

回顧JAVA中的鎖機制

Java中的鎖機制 在Java中&#xff0c;鎖機制是多線程編程里保障數據一致性與線程安全的關鍵技術。 1. 內置鎖&#xff1a;synchronized關鍵字 synchronized是Java的內置鎖機制&#xff0c;能夠保證在同一時刻&#xff0c;只有一個線程可以執行被其修飾的代碼塊或方法。 用法…

YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目標檢測論文精讀(逐段解析)

YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目標檢測論文精讀&#xff08;逐段解析&#xff09; 論文地址&#xff1a;https://www.arxiv.org/abs/2410.17725 Rahima Khanam and Muhammad Hussain Ultralytics公司發布 CVPR 2024 論文寫的比較簡單&#xff…

【Erdas實驗教程】025:遙感圖像輻射增強(霧霾去除)

文章目錄 一、霧霾去除原理二、霧霾去除案例一、霧霾去除原理 遙感影像霧霾去除的核心原理是消除大氣散射對電磁波的干擾,恢復地物真實反射信息。Haze Reduction 工具的原理: 該工具基于暗目標法(Dark Object Subtraction, DOS),適用于去除因大氣散射(霧霾本質是大氣顆…

Language Models are Unsupervised Multitask Learners :語言模型是無監督的多任務學習者

摘要 自然語言處理任務&#xff0c;如問答、機器翻譯、閱讀理解和摘要&#xff0c;通常通過在特定任務的數據集上進行監督學習來解決。我們展示了語言模型在訓練于一個包含數百萬網頁的新數據集——WebText——時&#xff0c;可以無需任何顯式監督就開始學習這些任務。當模型以…