Springboot | MyBatis-Plus的CRUD接口和條件構(gòu)造器的使用

一反浓、MyBatis-Plus 主要特性
二萌丈、常用的CRUD接口
三赞哗、條件構(gòu)造器
四、MyBatis-Plus 實現(xiàn)表的增刪改查操作示例


一辆雾、MyBatis-Plus 主要特性

(1) MyBatis-Plus 內(nèi)置通用的Mapper和Service肪笋,還有強(qiáng)大的條件構(gòu)造器,支撐起強(qiáng)大的CRUD操作
(2)使用Lamdba表達(dá)式調(diào)用實體類的字段度迂,不需要擔(dān)心字段名寫錯
(3)內(nèi)置代碼生成器藤乙,采用代碼或者 Maven 插件就可以快速生成 Mapper 、 Model 惭墓、 Service 坛梁、 Controller 層代碼

二、常用的CRUD接口

包括Service層和Mapper層的CRUD接口腊凶,可查看官網(wǎng)的詳細(xì)描述
轉(zhuǎn)官網(wǎng)介紹:https://baomidou.com/guide/crud-interface.html#service-crud-%E6%8E%A5%E5%8F%A3
Service層CRUD操作主要是封裝在IService接口里划咐,包括get查詢單行,list查詢集合钧萍,remove刪除褐缠,page分頁等。
Service層CRUD操作的這些前綴命名與Mapper層的CRUD操作有所區(qū)別风瘦,分別對應(yīng)Mapper層CRUD操作:select查詢單行队魏、集合和分頁,delete刪除万搔,封裝在BaseMapper中胡桨。

Service層CRUD操作圖片.png

Mapper層的CRUD操作圖片.png

三、條件構(gòu)造器

MyBatis-Plus提供了Wrapper抽象類瞬雹,支持很多sql語法昧谊,比如查詢,比較挖炬,分組查詢揽浙,排序,子查詢等意敛,方便我們用面向?qū)ο蟮姆绞饺崿F(xiàn)sql語句馅巷。

1、條件構(gòu)造器Wrapper類

條件構(gòu)造器Wrapper使用.png

Wrapper: 條件構(gòu)造抽象類草姻,最頂端父類
AbstractWrapper: 用于封裝查詢條件钓猬,生成 Sql 的 Where 條件
QueryWrapper: Entity 對象封裝查詢操作類
UpdateWrapper: Update 條件封裝,用于Entity對象更新操作
AbstractLambdaWrapper: Lambda 語法使用 Wrapper 統(tǒng)一處理解析 Lambda 獲取的 Column撩独。
LambdaQueryWrapper:用Lambda語法來使用查詢Wrapper
LambdaUpdateWrapper:用Lambda語法來使用更新Wrapper

2敞曹、條件構(gòu)造器和SQL的對應(yīng)關(guān)系

條件構(gòu)造器和SQL的對應(yīng)關(guān)系.png

四账月、MyBatis-Plus 實現(xiàn)表的增刪改查操作示例

準(zhǔn)備工作:先添加MyBatis-Plus 依賴

        <!-- SpringBoot集成mybatis框架 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.spring.boot.starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.0.7.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>

1、查詢操作

(1)單行查詢

    @Autowired
    private SysDeptMapper sysDeptMapper;

    @Test
    public void selectOne(){
        //1-構(gòu)造LambdaQueryWrapper構(gòu)造器
        LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //2-查詢部門名稱=研發(fā)部門的記錄
        lambdaQueryWrapper.eq(SysDept::getDeptName,"研發(fā)部門" );
        //3-查詢一條記錄
        SysDept sysDept = sysDeptMapper.selectOne(lambdaQueryWrapper);
        System.out.println("查詢一條記錄:"+sysDept);
    }

(2)集合查詢

    @Autowired
    private SysDeptMapper sysDeptMapper;

    @Test
    public void selectList(){
        //1-構(gòu)造LambdaQueryWrapper構(gòu)造器
        LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //2-查詢部門名稱like "%部門" 并且部門電話號碼不為空
        lambdaQueryWrapper.likeLeft(SysDept::getDeptName,"部門" ).isNotNull(SysDept::getPhone);
        //3-查詢集合
        List<SysDept> sysDeptList = sysDeptMapper.selectList(lambdaQueryWrapper);
        sysDeptList.forEach(System.out::println);
    }

(3)分頁查詢

    @Autowired
    private SysDeptMapper sysDeptMapper;
    @Test
    public void select(){
        //1-構(gòu)造LambdaQueryWrapper構(gòu)造器
        LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //2- id 降序排列
        lambdaQueryWrapper.orderByDesc(SysDept::getDeptId);
        //2.1-分頁 curpage當(dāng)前頁澳迫,pageSize每頁條數(shù)
        Integer curpage = 0;
        Integer pageSize = 10;
        Page<SysDept> page = new Page<>(curpage,pageSize);
        //3-分頁查詢
        IPage<SysDept> sysDeptIPage = sysDeptMapper.selectPage(page, lambdaQueryWrapper);
        List<SysDept> sysDeptList = sysDeptIPage.getRecords();
        sysDeptList.forEach(System.out::println);
}

2局齿、插入操作

(1) 插入一條記錄

    @Autowired
    private SysDeptMapper sysDeptMapper;
    @Autowired
    private SysDeptService sysDeptService;

    @Test
    public void createOne(){
        //1-構(gòu)造添加的實體
        SysDept sysDept = new SysDept();
        sysDept.setDeptName("測試創(chuàng)建部門");
        sysDept.setPhone("12312123131");
        sysDept.setEmail("1214@qq.com");
        //2-新增一條記錄
        LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        int result = sysDeptMapper.insert(sysDept);

        //或者使用Service的新增接口
        SysDept sysDept1 = new SysDept();
        sysDept1.setDeptName("測試創(chuàng)建部門1");
        sysDept1.setPhone("12312123131");
        sysDept1.setEmail("1214@qq.com");
        LambdaQueryWrapper<SysDept> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
        Boolean result1 = sysDeptService.save(sysDept1);
    }

(3) 插入多條記錄
Mapper層沒有批量插入的接口,但Service層有批量插入的接口:

//Service層的批量插入
boolean saveBatch(Collection<T> entityList);
boolean saveBatch(Collection<T> entityList, int batchSize);

3橄登、修改操作

(1) 使用LambdaUpdateWrapper構(gòu)造器的修改操作

    @Test
    public void update(){

        //1-構(gòu)造LambdaUpdateWrapper構(gòu)造器
        LambdaUpdateWrapper<SysDept> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        //2-修改 id=110的記錄抓歼,將名稱修改
        lambdaUpdateWrapper.eq(SysDept::getDeptId, 110);
        lambdaUpdateWrapper.set(SysDept::getDeptName ,"部門名稱222");
        //3-修改操作
        sysDeptMapper.update(null,lambdaUpdateWrapper);
    }

4、刪除操作

Mapper層常用接口:

// 根據(jù) entity 條件拢锹,刪除記錄
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
// 刪除(根據(jù)ID 批量刪除)
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根據(jù) ID 刪除
int deleteById(Serializable id);

Service層常用接口:

// 根據(jù) entity 條件谣妻,刪除記錄
boolean remove(Wrapper<T> queryWrapper);
// 根據(jù) ID 刪除
boolean removeById(Serializable id);
// 刪除(根據(jù)ID 批量刪除)
boolean removeByIds(Collection<? extends Serializable> idList);

具體想要使用什么增刪改查操作,去參考官網(wǎng)的詳細(xì)介紹卒稳。

參考:
Mybatis-Plus官網(wǎng):https://baomidou.com/guide/crud-interface.html#service-crud-%E6%8E%A5%E5%8F%A3
Mybatis-Plus使用條件構(gòu)造器(QueryWrapper)進(jìn)行條件查詢的9個小例子:http://www.reibang.com/p/70468959b1c3

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹋半,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子充坑,更是在濱河造成了極大的恐慌减江,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匪傍,死亡現(xiàn)場離奇詭異您市,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)役衡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門茵休,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人手蝎,你說我怎么就攤上這事榕莺。” “怎么了棵介?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵钉鸯,是天一觀的道長。 經(jīng)常有香客問我邮辽,道長唠雕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任吨述,我火速辦了婚禮岩睁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揣云。我一直安慰自己捕儒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刘莹,像睡著了一般阎毅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上点弯,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天扇调,我揣著相機(jī)與錄音,去河邊找鬼蒲拉。 笑死肃拜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雌团。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼士聪,長吁一口氣:“原來是場噩夢啊……” “哼锦援!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剥悟,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤灵寺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后区岗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體略板,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年慈缔,在試婚紗的時候發(fā)現(xiàn)自己被綠了叮称。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡藐鹤,死狀恐怖瓤檐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娱节,我是刑警寧澤挠蛉,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站肄满,受9級特大地震影響谴古,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稠歉,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一掰担、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轧抗,春花似錦恩敌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽月趟。三九已至,卻和暖如春恢口,著一層夾襖步出監(jiān)牢的瞬間孝宗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工耕肩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留因妇,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓猿诸,卻偏偏與公主長得像婚被,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子梳虽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354