SpringBoot教程(十三) | SpringBoot集成MybatisPlus

      網(wǎng)友投稿 1250 2025-04-02

      一、MybatisPlus簡介


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

      SpringBoot教程(十三) | SpringBoot集成MybatisPlus

      Mybatis-Plus是一個國產(chǎn)框架,有中文的文檔,所以使用起來還是很方便的,沒有那么大的障礙。

      文檔地址:baomidou.com/

      當前的最新版本是3.5.1

      文檔上說的十分清楚,這里我就不多說了。直接進入集成步驟。

      二、集成步驟

      我們首先拉取一個feature/mybatisPlus的分支,在這個分支上演示springboot集成MybatisPlus的用法。

      1. 引入 依賴

      4.0.0 com.lsqingfeng.springboot springboot-learning 1.0.0 8 8 org.springframework.boot spring-boot-dependencies 2.6.2 pom import org.springframework.boot spring-boot-starter-web org.projectlombok lombok 1.18.22 provided com.baomidou mybatis-plus-boot-starter 3.5.1 com.baomidou mybatis-plus-generator 3.5.1 org.freemarker freemarker 2.3.31 org.springframework.boot spring-boot-devtools true mysql mysql-connector-java runtime

      其中mybatis-plus-boot-starter是核心的應用包

      mybatis-plus-generator和 freemarker是用來逆向生成的,通過逆向生成的工具類,可以幫助我們生成相應的實體,mapper, service,controller。基本可以實現(xiàn)近乎0代碼開發(fā)單表的增刪改查。

      2. 逆向生成

      我們接下來就先演示一下mybatis-plus的逆向生成功能。所謂逆向工程,是根據(jù)數(shù)據(jù)庫的表結(jié)構(gòu)來幫助我們生成代碼,所以我們要先保證數(shù)據(jù)庫中的表是已經(jīng)建立完畢的。

      所謂逆向工程,其實就是一個工具類。我們把這個類直接放到我們的工程下,然后配置相關(guān)的數(shù)據(jù)庫連接和生成的目錄位置,和要生成的表即可,執(zhí)行完畢后,就可以直接生成我們所需要的類。

      新版本的MybatisPlus自動生成的方式和舊版本的不太一樣,大家使用的時候要注意,這一點在官方文檔上已經(jīng)做了具體說明。

      baomidou.com/pages/779a6…

      這里由于我們使用的是最新的版本,所以采用新版本的生成方式。

      我們在項目下創(chuàng)建一個utils的包,然后加入我們的工具類 MybatisPlusGenerator,具體內(nèi)容如下。

      同時需要設置相應的報名,模塊名和忽略的表名前綴。 addInclude方法里可以多個表名,用于設置為哪些表自動生成,也可以不設置,不設置的話默認會給當前庫中的所有表生成相應代碼。

      通過上面的代碼運行后自動生成的controller, service, mapper默認位于 com.lsqingfeng.springboot下的controller, service, mapper表下。 mapper對應的xml文件位于 resources/mapper文件夾下。這些內(nèi)容也都是可以進行修改的。

      生成好的文件默認情況如下;

      3. 添加配置

      逆向生成完畢,我們mybatis-Plus的基礎環(huán)境就基本搭建完畢了。接下來就是做一下配置。

      首先我們需要在啟動類上添加一個Mapper掃描的注解MapperScan,用來配置需要掃描的mapper包所在的位置。當然這個配置也可以放到任意的一個配置類上,效果是一樣的。

      package com.lsqingfeng.springboot; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @className: SpringBootLearningApplication * @description: springboot啟動類 * @author: sh.Liu * @date: 2022-01-10 14:36 */ @SpringBootApplication @MapperScan("com.lsqingfeng.springboot.mapper") public class SpringBootLearningApplication { public static void main(String[] args) { SpringApplication.run(SpringBootLearningApplication.class, args); } }

      如果我們想要使用Mybatis-Plus中的分頁功能,我們還需要添加一個配置類,加入分頁-的配置。

      package com.lsqingfeng.springboot.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @className: MybatisPlusConfig * @description: * @author: sh.Liu * @date: 2022-03-04 14:55 */ @Configuration public class MybatisPlusConfig { /** * 老版本,目前已失效 * @return */ /**@Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); return paginationInterceptor; }*/ /** * 新的分頁插件,一緩和二緩遵循mybatis的規(guī)則, */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }

      再添加一個自動填充create_time和update_time的配置類:

      package com.lsqingfeng.springboot.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; /** * @className: MyMetaObjectHandler * @description: * @author: sh.Liu * @date: 2022-03-04 14:57 */ @Slf4j @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill..."); this.setFieldValByName("createTime", LocalDateTime.now(), metaObject); this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject); } @Override public void updateFill(MetaObject metaObject) { log.info("start update fill..."); this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject); } }

      這個配置類是要和實體類上的注解配置使用的。由于已經(jīng)在自動生成的工具類上做了設置,所以自動生成的實體中,createTime和updateTime上都會有對應注解,這樣才能自動填充。

      /** * 創(chuàng)建時間 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 更新時間 */ @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime;

      4. 測試

      寫一個Controller測試一下:這里大家要注意一下mybatisPlus提供的一些常用api, page,list,getOne,save,update等。大家可以關(guān)注一下具體寫法。

      package com.lsqingfeng.springboot.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.lsqingfeng.springboot.base.Result; import com.lsqingfeng.springboot.entity.User; import com.lsqingfeng.springboot.service.IUserService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** *

      * 前端控制器 *

      * * @author springBoot-Learning * @since 2022-02-28 */ @RestController @RequestMapping("/user") public class UserController { /** * 構(gòu)造方法注入 */ private final IUserService userService; public UserController(IUserService userService) { this.userService = userService; } @GetMapping("/save") public Result save(){ User user =new User(); user.setAge(18); user.setAddress("北京王府井大街"); user.setName("張某某"); userService.save(user); return Result.success(); } @GetMapping("/update") public Result update(Integer id){ User user =new User(); user.setId(id); user.setName("修改的名字"); userService.updateById(user); return Result.success(); } @GetMapping("/list") public Result list(){ // 返回所有 List list = userService.list(); return Result.success(list); } @GetMapping("/listByContion") public Result listByContion(){ /** * 條件查詢, 通過QueryWrapper來實現(xiàn)查詢的條件: * eq: 代表相等 * like: 模糊匹配 * orderBy: 排序 * in, notin * 大于,小于,between等 */ List list = userService.list(new LambdaQueryWrapper() // 查詢年齡=11的 .eq(User::getAge, 11) // 模糊匹配 .like(User::getName, "%張%") // 排序,按照創(chuàng)建時間 .orderByDesc(User::getCreateTime) ); return Result.success(list); } @GetMapping("/getById") public Result getById(Integer id){ User user = userService.getById(id); return Result.success(user); } @GetMapping("/delete") public Result delete(Integer id){ userService.removeById(id); return Result.success(); } @GetMapping("/page") public Result page(int pageNum, int pageSize, String name){ IPage page = new Page<>(pageNum, pageSize); IPage page1 = userService.page(page, new LambdaQueryWrapper() // 主要演示這里可以加條件。在name不為空的時候執(zhí)行 .eq(StringUtils.isNotEmpty(name), User::getName, "%" + name + "%")); return Result.success(page1); } }

      驗證:

      save接口:

      數(shù)據(jù)庫:

      更新接口:

      數(shù)據(jù)庫:

      查詢所有接口:

      條件查詢接口:

      條件寫死了,查詢年齡=11, 名字包含張的,沒有符合條件的數(shù)據(jù):

      List list = userService.list(new LambdaQueryWrapper() // 查詢年齡=11的 .eq(User::getAge, 11) // 模糊匹配 .like(User::getName, "%張%") // 排序,按照創(chuàng)建時間 .orderByDesc(User::getCreateTime) ); 復制代碼

      根據(jù)id查詢接口:

      分頁查詢:

      三、總結(jié)

      mybtisPlus的常用操作我們就已經(jīng)介紹完了。mybatisPlus當前的使用熱度也是越來越大,通過這篇文章相信大家應該會對mybatisPlus的使用有一個比較深刻的理解。

      使用的主要步驟就是,先設計庫表,然后通過自動生成工具,生成我們所需要的實體、mapper、service等,Controller一般都是我們自己開發(fā),無需使用他們生成的Controller,之后就可以在我們的項目中,通過調(diào)用相應的service, mapper來實現(xiàn)常用的增刪改查操作。mybatisPlus火熱的主要原因即使他們封裝好的單表操作api,免去了我們書寫大量sql的工作量,可以直接通過調(diào)用相應api的方式完成大部分的單表操作功能,非常的簡便。

      初次之外,mybatisPlus提供了非常詳細而又可讀的中文文檔,我們完全可以在文檔中找到我們所有想要找到的內(nèi)容。這一點應該也是國內(nèi)很青睞他的一個重要原因吧。

      如果我們我們想要開發(fā)自定義的sql,使用方式和mybatis完全一樣,因為它和完全兼容mybatis的,我們只需要在的mapper.xml文件中寫自己的自定義sql就行了。

      另: 配套項目代碼已托管中g(shù)itCode: gitcode.net/lsqingfeng/…

      所有文章也會在微信公眾號首發(fā)更新,歡迎關(guān)注: 一縷82年的清風

      MyBatis Spring Boot

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

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

      上一篇:WPS輕松辦公—如何設置表格的指定框線的格式(wpsppt表格怎么設置框線)
      下一篇:WPS表格技巧— 如何給折線圖添加垂直的引線(wps表格使用方法與技巧)
      相關(guān)文章
      亚洲高清视频在线播放| 久久久久久亚洲精品中文字幕 | 亚洲色图综合网站| 亚洲精品国产字幕久久不卡| 中文字幕精品亚洲无线码一区应用| 国产精品亚洲片在线花蝴蝶| 国产精品亚洲精品久久精品| 亚洲成在人线aⅴ免费毛片| 亚洲国产高清国产拍精品| 亚洲国产欧美一区二区三区| 亚洲女女女同性video| 亚洲精品无码成人片久久不卡 | 亚洲一级免费视频| 亚洲人成777在线播放| 亚洲欧洲日韩极速播放| 亚洲天堂2017无码中文| 亚洲综合成人婷婷五月网址| 亚洲免费网站观看视频| 亚洲高清一区二区三区电影| 日韩国产精品亚洲а∨天堂免| 老子影院午夜伦不卡亚洲| mm1313亚洲国产精品美女| 亚洲AV蜜桃永久无码精品| 亚洲精品国产V片在线观看| 国产偷窥女洗浴在线观看亚洲| 亚洲熟妇中文字幕五十中出| 国产成人A人亚洲精品无码| 亚洲AV人无码综合在线观看| 亚洲第一页中文字幕| 亚洲中字慕日产2020| 亚洲熟女综合色一区二区三区 | 亚洲AV无码国产在丝袜线观看| 亚洲国产美国国产综合一区二区 | ZZIJZZIJ亚洲日本少妇JIZJIZ| 久久久久亚洲AV无码专区网站| 亚洲欧洲国产精品香蕉网| 久久精品国产亚洲AV麻豆王友容| 久久精品国产亚洲AV无码娇色| 亚洲国产综合在线| 亚洲AV无码AV男人的天堂不卡| 亚洲国产精品一区二区第四页|