那些年我們一起學過的Mybatis-Plus的常用注解(12個)

      網友投稿 1295 2022-05-30

      一、前言

      最近學習了mybatis-plus,現在帶大家來回顧一下在學習的過程中,我們會經常使用哪些注解,這些注解具有哪些功能?如何使用這些注解?特別適合新手的學習以及老手的復習~

      廢話不多說,咱們速速開始吧!

      二、mybatis-plus簡介

      MyBatis-Plus(簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

      愿景是成為 MyBatis 最好的搭檔!

      官方地址:https://baomidou.com/

      文檔發布地址:https://baomidou.com/pages/24112f

      三、常用注解(12個)

      1、@MapperScan

      @SpringBootApplication @MapperScan("com.cabbage.mapper") public class Mybatisplus01Application { public static void main(String[] args) { SpringApplication.run(Mybatisplus01Application.class, args); } }

      結合代碼和圖片,小伙伴們估計可以猜出來:注解@MapperScan是用來掃描mapper的映射文件的,只有使用它之后,我們才能夠使用官方提供的各種方法。

      2、@Mapper

      @Mapper @Repository public interface UserMapper extends BaseMapper { /** * 根據id查詢到map集合 * @param id * @return */ Map selectMapById(Long id); }

      為什么第二個我會介紹這個注解呢?是因為@Mapper作用于數據庫中的實體類之后,就不需要再次寫注解@MapperScan,他們之間的區別就是@Mapper只能映射一個實體類,而@MapperScan可以映射整個包下的實體類,范圍更廣,操作更簡便。

      3、@TableName

      先看看如下代碼:

      @Data //設置實體類對應的表名 @TableName("t_user") public class User { @TableId(value = "id",type = IdType.AUTO) private Long uid; @TableField(value = "name") private String name; private Integer age; private String email; @TableField(value = "is_deleted") @TableLogic private Integer isDeleted; }

      大家都知道,當實體類類型的類名和要操作的表的表名不一致時,就會報錯,而注解@TableName就可以幫助我們解決這個問題。我的數據庫表名是t_user,實體類名是User,只需要在類名上寫入@TableName("t_user")就可以了

      4、@Data

      這個注解也極大的簡化了我們的開發,為什么這樣說呢?是因為,使用這個注解,就可以省略getter()、setter()、toString()、重寫該類的equals()和hashCode()方法,這樣一聽,是不是很吃驚呢?

      5、@TableId

      MyBatis-Plus在實現增刪改查時,會默認將id作為主鍵列,并在插入數據時,默認

      基于雪花算法的策略生成id,這個雪花算法在這里就不明講了。

      當使用@TableId(value = "id")語句時,若實體類和表中表示主鍵的不是id,而是其他字段,例如代碼中的uid,MyBatis-Plus會自動識別uid為主鍵列,否則就會報這樣的錯誤:

      當使用@TableId(value = "id",type = IdType.AUTO)語句時,代表著使用數據庫的自增策略,

      注意,該類型請確保數據庫設置了id自增,否則無效!

      當然呢,@TableId的功能,也可以寫在application.yml配置文件中,配置如下:

      mybatis-plus: global-config: banner: false db-config: # 配置MyBatis-Plus操作表的默認前綴 table-prefix: "t_" # 配置MyBatis-Plus的主鍵策略 id-type: auto # 配置MyBatis日志 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

      6、@TableField

      MyBatis-Plus在執行SQL語句時,要保證實體類中的屬性名和表中的字段名一致,否則就會報錯,語句@TableField(value = "is_deleted")代表著讓數據庫表中is_deleted與實體類中isDeleted字段名一樣。

      注意:

      若實體類中的屬性使用的是駝峰命名風格,而表中的字段使用的是下劃線命名風格

      例如實體類屬性userName,表中字段user_name,此時MyBatis-Plus會自動將下劃線命名風格轉化為駝峰命名風格

      若實體類中的屬性和表中的字段不滿足上述條件,例如實體類屬性name,表中字段username,此時需要在實體類屬性上使用@TableField("username")設置屬性所對應的字段名

      7、@TableLogic

      在講這個注解之前,我們先認識一下邏輯刪除。

      那些年,我們一起學過的Mybatis-Plus的常用注解(12個)

      物理刪除:真實刪除,將對應數據從數據庫中刪除,之后查詢不到此條被刪除的數據

      邏輯刪除:假刪除,將對應數據中代表是否被刪除字段的狀態修改為“被刪除狀態”,之后在數據庫中仍舊能看到此條數據記錄

      使用場景:可以進行數據恢復

      在我的數據庫表中,is_delete為1時,代表著邏輯上的刪除,is_delete為0時,表示沒有刪除

      注解@TableLogic的使用,就代表著該類中的屬性是邏輯刪除的屬性

      注意:

      在測試邏輯刪除的時候,真正執行的是修改UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0

      測試查詢功能,被邏輯刪除的數據默認不會被查詢SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0

      在學習mybatis-plus分頁插件的時候,我們需要配置-,看代碼:

      @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor (new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }

      8、@Configuration

      這個注解相信大家已經見過很多次了,可能都有些不耐煩了,但是我還是要在這里提一下,使用該注解的類代表著是一個配置類,該類本身也是一個bean。也可以在該類中加載bean,使用@Bean注解

      9、@Bean

      注解@Bean表示的是將方法中的對象注入到spring容器中,以后方便于之后在容器中拿出對象,簡化開發。常與@Configuration注解一起使用,相信大家也經常見到此注解,這里也不多講了~

      既然講到了分頁插件,那就簡單的看看他們的基本使用方法吧

      @Test void test01() { //設置分頁參數 Page page = new Page<>(1, 3); userMapper.selectPage(page, null); //獲取分頁數據 List list = page.getRecords(); list.forEach(System.out::println); System.out.println("當前頁:" + page.getCurrent()); System.out.println("每頁顯示的條數:" + page.getSize()); System.out.println("總記錄數:" + page.getTotal()); System.out.println("總頁數:" + page.getPages()); System.out.println("是否有上一頁:" + page.hasPrevious()); System.out.println("是否有下一頁:" + page.hasNext()); }

      運行結果:

      10、@Param

      當我使用自定義的分頁語句時:

      @Mapper @Repository public interface UserMapper extends BaseMapper { /** * 通過年齡查詢用戶信息并分頁 * @param page * @param age * @return */ Page selectPageByAge( Page page, @Param("age") Integer age); }

      @Param是MyBatis所提供的,作為Dao層的注解,作用是用于傳遞參數,從而可以與SQL中的的字段名相對應,簡化了開發~

      11、@Version

      在我們學習樂觀鎖的時候,肯定見過如下代碼:

      @Data @TableName("t_product") public class Product { private Long id; private String name; private Integer price; @Version private Integer version; }

      @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //分頁插件 interceptor.addInnerInterceptor (new PaginationInnerInterceptor(DbType.MYSQL)); //樂觀鎖插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } }

      而這個注解@Version就是實現樂觀鎖的重要注解,當要更新數據庫中的數據時,例如價格,version 就會加 1,如果where語句中的version版本不對,則更新失敗。

      12、@EnumValue

      @Getter public enum SexEnum { MALE(1, "男"), FEMALE(2, "女"); @EnumValue private Integer sex; private String sexName; SexEnum(Integer sex, String sexName) { this.sex = sex; this.sexName = sexName; } }

      mybatis-plus: global-config: banner: false db-config: # 配置MyBatis-Plus操作表的默認前綴 table-prefix: "t_" # 配置MyBatis-Plus的主鍵策略 id-type: auto # 配置MyBatis日志 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 配置類型別名所對應的包 type-aliases-package: cabbage.pojo # 配置掃描通用枚舉 type-enums-package: cabbage.pojo

      而注解@EnumValue所標識的屬性值會存儲到數據庫,相當于語句INSERT INTO t_user ( username, age, sex ) VALUES ( ?, ?, ? )

      Parameters: Enum(String), 20(Integer), 1(Integer)

      四、總結

      好了,各位小伙伴們,mybatis-plus的常用注解講解的差不多了,相信大家已經感受到國產框架的方便支持了,希望大家積極支持。如果感覺博主寫的還不錯的話,可以給博主三連支持哦~~

      MyBatis

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:K8s 開發概念簡介
      下一篇:OpenCV計算機圖像處理 —— 凸性缺陷 + 點多邊形測試 + 形狀匹配 + 輪廓分層與cv.findContours()
      相關文章
      亚洲一日韩欧美中文字幕在线| 亚洲黑人嫩小videos| 亚洲天堂2017无码中文| 久久亚洲AV无码精品色午夜| 亚洲今日精彩视频| 亚洲国产精品免费视频| 久久久久久亚洲精品| 久久精品亚洲综合| 亚洲无线电影官网| 亚洲AV永久无码精品水牛影视| 亚洲AV永久无码区成人网站 | 亚洲砖码砖专无区2023| 亚洲精品国产日韩| 中文字幕在线日亚洲9| 亚洲精品9999久久久久无码| 亚洲精品天堂成人片AV在线播放| 国产亚洲精aa在线看| 亚洲欧美日韩一区二区三区| 亚洲精品GV天堂无码男同| 亚洲AV永久无码精品一福利| 国产亚洲漂亮白嫩美女在线| 亚洲国产精品尤物YW在线观看| 国产精品亚洲mnbav网站 | 最新亚洲春色Av无码专区| 亚洲精品成a人在线观看夫| 国产成人精品亚洲一区| 亚洲综合区小说区激情区| 亚洲欧洲∨国产一区二区三区| 亚洲国产精品成人久久| 亚洲国产精久久久久久久| 亚洲精品电影在线| 亚洲AV无码成人专区| 亚洲爆乳无码专区www| 国产亚洲综合久久| 亚洲午夜精品第一区二区8050| 亚洲人成网77777亚洲色| 久久亚洲AV无码精品色午夜麻| 久久久久亚洲AV无码专区体验| 亚洲人成免费电影| 欧美色欧美亚洲另类二区| 亚洲日韩人妻第一页|