【MybatisPlus】簡介與使用

MyBatisPlus

1.簡介

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

官網:https://baomidou.com/

MyBatis-Plus特性:

  • 無侵入:只做增強不做改變,不會對現有的工程產生影響
  • 強大的CRUD操作:內置通用Mapper,少量配置即可實現單表CRUD操作
  • 支持Lambda:編寫查詢條件無需擔心字段寫錯
  • 支持主鍵自動生成
  • 內置分頁插件

開發方式

  • 單獨使用MyBatis-Plus
  • 基于Spring使用MyBatis-Plus
  • 基于SpringBoot使用MyBatis-Plus(最常用)

maven坐標

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version>
</dependency>
2.CRUD接口

MP框架提供常用的CRUD方法,這些方法都是定義在BaseMapper接口中的,開發過程中經常使用這寫方法操作數據庫

3.常用注解
3.1 @TableName注解

通過@TableName注解可以映射實體類和表的對應關系

  • 名稱:@TableName

  • 類型:類注解

  • 位置:模型類上

  • 作用:設置當前類對應與數據庫表關系

  • 示例

    @TableName("t_user") //當前實體類對應的表為t_user
    public class User {private Long id;
    }
    

    注:如果類名和表名一致,MP可以自動進行映射,此時@TableName注解可以省略

3.2 @TableField注解

通過@TableField注解可以映射實體類的屬性和表字段的對應關系

  • 名稱:@TableField

  • 類型:屬性注解

  • 位置:模型類屬性上

  • 作用:設置當前屬性對應的數據庫表中的字段關系

  • 相關屬性

    value:設置數據庫表字段名稱

    exist:設置屬性在數據庫表字段中是否存在,默認為true

  • 示例

    public class User {@TableField(value="pwd") //當前屬性對應的字段為pwdprivate String password;@TableField(exist = false) //當前屬性在表中沒有對應的字段private String online;
    }
    

    如果屬性名和字段名一致,MP可以自動進行映射,此時@TableField注解可以省略

    如果屬性名使用駝峰命名法命名,字段名使用對應的下劃線分割命名,MP可以自動進行映射,此時@TableField可以省略

3.3@TableId注解

通過@TableId注解可以映射實體類的屬性和表主鍵字段的對應關系,還可以設置主鍵的生成策略

  • 名稱:@TableId

  • 類型:屬性注解

  • 位置:模型類中用于標注在逐漸的屬性上

  • 相關屬性

    value:設置數據庫主鍵字段名稱,如果屬性名和字段名一致,可以省略此屬性

    type:設置主鍵的生成策略,值參照IdType枚舉值

  • 示例

    public class User {@TableId(type = IdType.AUTO) //當前id屬性和表的主鍵字段id對應,并且設置主鍵生成策略為AUTOprivate Long id;
    }
    

主鍵生成策略

  • AUTO:使用數據庫id自增策略控制id生成
  • NONE:不設置id生成策略
  • INPUT:用戶手工輸入id
  • ASSIGN_ID:以雪花算法生成id(可兼容數值型與字符串型)

為了簡化開發,可以在application,yml中配置全局的主鍵生成策略

mybatis-plus:global-config:db-config:id-type: assign_id #全局設置主鍵生成策略
4.條件構造器

MP對于Service層的支持,提供操作數據庫的方法
IService接口:
在這里插入圖片描述
IService接口實現類:
在這里插入圖片描述
MP對于Mapper層的支持,提供操作數據庫的方法
在這里插入圖片描述

4.1 條件構造器介紹

通過條件構造器(Wrapper),可以控制最終生成的 SQL 語句的條件部分,如下:

  • select ____ from table where ____ order by ____
  • update table set ____ where ____
  • delete from table where____

通過條件構造器,就可以控制上面SQL語句中____位置的SQL片段,在項目開發過程中經常使用到

mybatis-plus支持service層繼承IService接口,mapper層繼承BaseMapper接口,IService接口和BaseMapper接口中有很多方法,都需要條件構造器作為參數

4.2使用較多的條件構造器
  • QueryWrapper

    通過QueryWrapper條件構造器,可以控制最終生成的查詢、刪除類的SQL語句

    SQL結構:

    select_from table where_order by_

    delete from table where_

    示例:

    @Service
    public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {//創建 QueryWrapper對象QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.select("id","name");//設置查詢字段queryWrapper.gt("age",20);//添加查詢條件,要求age大于20queryWrapper.eq("province","陜西省");//添加查詢條件,要求省份是陜西省queryWrapper.like("name","zhangsan");//模糊查詢queryWrapper.orderByDesc("id");//排序條件,根據id字段進行降序排序   List<Student> studentList = getList(queryWrapper);}
    
  • LambdaQueryWrapper

    使用QueryWrapper設置條件時,是通過字符串指定字段名,在編譯階段無法發現錯誤,程序運行階段就會拋出異常

    LambdaQueryWrapper的作用和QueryWrapper相同,都是控制最終生成的查詢、刪除類的SQL語句。不同點在于語法層面。QueryWrapper是通過字段名來設置條件,LambdaQueryWrapper是通過Lambda語法來設置條件,可以做到在編譯時期能夠發現錯誤

    示例:

    @Service
    public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {//創建LambdaQueryWrapper對象LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();queryWrapper.select(Student:id,Student:name);//設置查詢字段queryWrapper.gt(Student:age,20);//添加查詢條件,要求age大于20queryWrapper.eq(Student:privince,"陜西省");//添加查詢條件,要求省份是陜西省queryWrapper.like(Student:name,"zhangsan");//模糊查詢queryWrapper.orderByDesc(Student:id);//排序條件,根據id字段進行降序排序   List<Student> studentList = getList(queryWrapper);}
    
  • UpdateWrapper

    通過 UpdateWrapper 條件構造器,可以控制最終生成的更新類的SQL語句。

    **SQL結構:**update table set _______ where _______

    示例:

    @Service
    public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {//創建QueryWrapper對象UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set("name","zhangsan");//將姓名修改為zhangsanupdateWrapper.gt("age",20);//添加查詢條件,要求age大于20update(updateWrapper)}
    
  • LambdaUpdateWrapper

    LambdaUpdateWrapper的作用和UpdateWrapper相同,都是控制最終生成的更新類的SQL語句。不同點在于語法層面。UpdateWrapper是通過字段名來設置條件,LambdaUpdateWrapper是通過Lambda語法來設置條件,可以做到在編譯期就能夠發現錯誤。

    @Service
    public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {//創建QueryWrapper對象UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set(Student:name,"zhangsan");//將姓名修改為zhangsanupdateWrapper.gt(Student:age,20);//添加查詢條件,要求age大于20update(updateWrapper)}
    

    項目開發中建議使用 LambdaUpdateWrapper 來代替 UpdateWrapper

    在使用條件構造器進行條件構造時,可以使用鏈式編程

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

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

相關文章

C_1練習題

一、單項選擇題(本大題共20小題,每小題2分,共40分。在每小題給出的四個備選項中,選出一個正確的答案&#xff0c;并將所選項前的字母填寫在答題紙的相應位置上。) 若 x 為int 型變量,則執行以下語句后,x的值為(&#xff09; x5; xx*x; A. 25 B.-20 C. 20 D.-25 若x、i、j、k都…

C#學習相關系列之Linq用法---group和join相關用法(三)

一、Group用法 在C#的LINQ中&#xff0c;Grou將集合中的元素按照指定的鍵進行分組。Group方法返回一個IEnumerable<IGrouping<TKey, TElement>>類型的集合&#xff0c;其中TKey表示分組的鍵類型&#xff0c;TElement表示集合中元素的類型。每個IGrouping<TKey, …

php如何實現文件上傳

php實現文件上傳需要通過全局變量&#xff08;數組&#xff09;&#xff1a;$_FILES 結合 move_uploaded_file 函數來實現。 move_uploaded_file函數&#xff08;只對POST方式生效&#xff09;&#xff1a; 其中move_uploaded_file函數語法&#xff1a;move_uploaded_file(需要…

Vue生成二維碼并進行二維碼圖片下載

1、安包 npm install vue-qr --save2、引入 // vue2.0 import VueQr from vue-qr // vue3.0 import VueQr from vue-qr/src/packages/vue-qr.vue new Vue({components: {VueQr} })<!-- 設備二維碼 對話框 270px--><el-dialog title"點位二維碼" :visible.…

超級簽名封號掉簽該怎么辦

如果超級簽名封號掉簽了&#xff0c;可以考慮以下幾種解決方法&#xff1a; 聯系簽名服務商&#xff1a;首先&#xff0c;可以聯系簽名服務商&#xff0c;了解封號的原因和解決方案。app封裝打包可能會提供技術支持或幫助恢復簽名。 檢查簽名配置&#xff1a;確認簽名配置是否…

練習題——【學習補檔】庫函數的模擬實現

各種庫函數的模擬實現 一、模擬實現strlen1.地址-地址型2.遞歸型3.計數器型 二、模擬實現strcpy三、模擬實現strcmp四、模擬實現strcat五、模擬實現strstr 一、模擬實現strlen 模擬實現strlen有三種方法 1.地址-地址型 2.遞歸型 3.計數器型1.地址-地址型 // //1.地址-地址型 …

云服務器-從零搭建前后端服務

使用須知 選擇0M帶寬不能訪問公網&#xff08;不分配公網IP&#xff09;&#xff0c;如需分配公網IP請增加帶寬值。云服務器ECS默認不開啟虛擬內存如您需要使用請登錄云服務器內部操作。Linux開啟swap&#xff08;虛擬內存&#xff09;、Windows虛擬內存的設置若您購買了數據盤…

含分布式電源的配電網可靠性評估matlab程序

微?關注“電氣仔推送”獲得資料&#xff08;專享優惠&#xff09; 參考文獻&#xff1a; 基于仿射最小路法的含分布式電源配電網可靠性分析——熊小萍 主要內容&#xff1a; 通過概率模型和時序模型分別進行建模&#xff0c;實現基于概率模型最小路法的含分布式電源配電網…

web需求記錄

需求1&#xff1a;根據后端傳過來的設備名:DESKTOP-4DQRGQB&#xff0c;以及mac:e0:be:03:74:40:0b&#xff1b;iQOO-8&#xff0c;mac:b0:33:66:38:c3:25&#xff0c;用web option 是動態增加的&#xff08;也就是那個選擇框里面的東西是根據后端傳過來的值動態增加的&#xf…

upload-labs關卡12(基于白名單的%00截斷繞過)通關思路

文章目錄 前言一、靶場需要了解的前置知識1、%00截斷2、0x00截斷3、00截斷的使用條件1、php版本小于5.3.292、magic_quotes_gpc Off 二、靶場第十二關通關思路1、看源代碼2、bp抓包%00截斷3、驗證文件是否上傳成功 總結 前言 此文章只用于學習和反思鞏固文件上傳漏洞知識&…

LL(1)語法分析程序設計與實現

制作一個簡單的C語言詞法分析程序_用c語言編寫詞法分析程序-CSDN博客文章瀏覽閱讀322次。C語言的程序中&#xff0c;有很單詞多符號和保留字。一些單詞符號還有對應的左線性文法。所以我們需要先做出一個單詞字符表&#xff0c;給出對應的識別碼&#xff0c;然后跟據對應的表格…

國民新旅游時代,OTA們如何制勝新周期?

文 | 螳螂觀察&#xff08;TanglangFin&#xff09; 作者 | 圖霖 消費全面復蘇的大背景下&#xff0c;旅游業正迎來預期中的拐點。 一個顯著表現是&#xff0c;旅游消費正在從可選消費轉化成必選消費。 國內消費者旅游需求的不降反增&#xff0c;就是最好的印證。 同程研究…

DoFaker: 一個簡單易用的換臉工具

DoFaker: 一個簡單易用的換臉工具 基于insightface開發&#xff0c;可以輕松替換視頻或圖片中的人臉。支持windows和linux系統&#xff0c;CPU和GPU推理。onnxruntime推理&#xff0c;無需pytorch。 更新 2023/9/16 更新動作遷移算法2023/9/14 更新臉部增強算法(GFPGAN)和超分…

TypeScript枚舉

1、數字枚舉 enum Direction {Up,Down,Left,Right, } var Direction; (function (Direction) {Direction[Direction["Up"] 0] "Up";Direction[Direction["Down"] 1] "Down";Direction[Direction["Left"] 2] "L…

[點云分割] 基于顏色的區域增長分割

效果&#xff1a; 代碼&#xff1a; #include <iostream> #include <thread> #include <vector>#include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/search/search.h> #include <pcl/search/kdtree.h> #inclu…

AR道具特效制作工具

AR&#xff08;增強現實&#xff09;技術已經逐漸滲透到各個行業&#xff0c;為企業帶來了全新的營銷方式和用戶體驗。在這個背景下&#xff0c;美攝科技憑借其強大的技術實力和創新精神&#xff0c;推出了一款專為企業打造的美攝AR特效制作工具&#xff0c;旨在幫助企業輕松實…

MIKE水動力筆記19_統計平均潮差

本文目錄 前言Step 1 ArcGIS中創建漁網點Step 2 將dfsu數據提取到漁網點Step 3 Python統計平均潮差 前言 日平均潮差&#xff08;average daily tidal range&#xff09;&#xff1a;日高潮潮高合計之和除以實有高潮個數為日平均高潮潮高&#xff0c;日低潮潮高合計之和除以實…

Quartz .Net 的簡單使用

參考了&#xff1a;c# .net framework 4.5.2 , Quartz.NET 3.0.7 - runliuv - 博客園 (cnblogs.com) https://www.cnblogs.com/personblog/p/11277527.html&#xff0c; Quartz.NET 作業調度&#xff08;一&#xff09;&#xff1a;Test - 簡書 自己要輪詢的任務&#xff1a…

NX二次開發UF_CAM_PREPRO_init_module 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_PREPRO_init_module Defined in: uf_cam_prepro.h int UF_CAM_PREPRO_init_module(void ) overview 概述 Initializes the required environment for this module. 初始化此…

淺談Python裝飾器原理與用法分析

前言 本文實例講述了Python裝飾器原理與用法。分享給大家供大家參考&#xff0c;具體如下&#xff1a; 1、裝飾器的本質是函數&#xff0c;主要用來裝飾其他函數&#xff0c;也就是為其他函數添加附加功能 2、裝飾器的原則: (1) 裝飾器不能修改被裝飾的函數的源代碼 (2) 裝…