SpringBoot3.3.X整合Mybatis-Plus的實現(xiàn)示例
前提說明:
項目的springboot版本為:<version>3.3.2</version>
需要整合的mybatis-plus版本:<version>3.5.7</version>
廢話不多說,開始造吧
1.準備好數(shù)據(jù)庫和表
2.配置全局文件
application.properties或者是application.yml(配置mapper的映射文件路徑)
我這里是application.properties,配置如下:
#配置服務器端口號 server.port=9090 #連接數(shù)據(jù)庫 spring.application.name=dormitory_backend spring.datasource.url=jdbc:mysql://localhost:3306/dormitory?allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #mybatis-plus配置mapper文件路徑 mybatis-plus.mapper-locations=classpath:/mapper/*.xml #打印sql日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl logging.level.com.dormitory.dormitory_backend.mapper=DEBUG
3.啟動類配置包掃描注解和路徑信息
配置之前先看下我這邊的包結構
啟動類,造吧?找到有@SpringBootApplication注解的類就是了,在其位置加上包掃描注解@MapperScan("com.dormitory.dormitory_backend.mapper")
注意括號里面的內容需要根據(jù)自己的包結構來配置,com.dormitory.dormitory_backend是我的包結構,主要看java,實在不懂,那就任意打開一個XXXmapper.java文件,看其包結構,框起來的一整個復制粘貼上去就可以了
4.導入依賴
無效依賴---我嘗試過導入網(wǎng)上的各種mybatis-plus的依賴:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-annotation</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-core</artifactId> <version>3.5.1</version> </dependency>
至于為什么說是無效依賴,導入以上的依賴無法使用mybatis-plus自帶的方法
發(fā)送請求時,后臺產生以下報錯:
Invalid bound statement (not found): com.dormitory.dormitory_backend.mapper.AttendanceMapper.deleteById
AttendanceMapper的deleteById方法是無效的綁定語句,也就是,無法識別到mybatis-plus自帶的刪除方法,但是可以識別自定義的mapper語句,能正常進行增刪改查,也就是原mybatis的寫法唄,但是,我想快速實現(xiàn)CRUD??!于是,網(wǎng)上找了一個解決的方法,配置一個類,請看下文:
import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.mapping.DatabaseIdProvider; import org.apache.ibatis.plugin.Interceptor; import org.mybatis.spring.boot.autoconfigure.MybatisProperties; import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; import org.springframework.util.StringUtils; import javax.sql.DataSource; @Configuration public class MybatisPlusConfig { @Autowired private DataSource dataSource; @Autowired private MybatisProperties properties; @Autowired private ResourceLoader resourceLoader = new DefaultResourceLoader(); @Autowired(required = false) private Interceptor[] interceptors; @Autowired(required = false) private DatabaseIdProvider databaseIdProvider; /** * mybatis-plus分頁插件 */ @Bean public PaginationInnerInterceptor paginationInnerInterceptor(){ PaginationInnerInterceptor page= new PaginationInnerInterceptor(); return page; } /** * 這里全部使用mybatis-autoconfigure 已經(jīng)自動加載的資源。不手動指定 <p> 配置文件和mybatis-boot的配置文件同步 @return */ @Bean public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() { MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean(); mybatisPlus.setDataSource(dataSource); mybatisPlus.setVfs(SpringBootVFS.class); if (StringUtils.hasText(this.properties.getConfigLocation())) mybatisPlus.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation())); if (!ObjectUtils.isEmpty(this.interceptors)) mybatisPlus.setPlugins(this.interceptors); MybatisConfiguration mc = new MybatisConfiguration(); mc.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class); // 數(shù)據(jù)庫字段設計為駝峰命名,默認開啟的駝峰轉下劃線會報錯字段找不到 mc.setMapUnderscoreToCamelCase(true); mybatisPlus.setConfiguration(mc); if (this.databaseIdProvider != null) mybatisPlus.setDatabaseIdProvider(this.databaseIdProvider); if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) mybatisPlus.setTypeAliasesPackage(this.properties.getTypeAliasesPackage()); if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) mybatisPlus.setTypeHandlersPackage(this.properties.getTypeHandlersPackage()); if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) mybatisPlus.setMapperLocations(this.properties.resolveMapperLocations()); return mybatisPlus; } }
配置了這個類,確實是可以使用mybatis-plus自帶的方法,但是自己寫的方法卻無法實現(xiàn)了
實現(xiàn)配置類后,請求自定義的新增方法:
實現(xiàn)配置類后,請求mybatis-plus自帶的刪除方法:
幾經(jīng)輾轉,發(fā)現(xiàn)導入以下這個依賴可以實現(xiàn)同時使用自定義方法和mybatis-plus自帶方法,注意:需要刪除MybatisPlusConfig類,以及將原先導入的三個依賴替換成新的依賴就可以了
有效依賴---導入mybatis-plus的依賴:
---------------原依賴----------------- <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-annotation</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-core</artifactId> <version>3.5.1</version> </dependency> --------------新依賴------------------ <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.7</version> </dependency>
5.實現(xiàn)表對應的實體類
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 io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor @TableName("t_attendance") public class Attendance { @ApiModelProperty("自增id") @TableId(value = "id",type = IdType.AUTO) private Integer id; @ApiModelProperty("賬號(學號)") @TableField("user_account") private String userAccount; @ApiModelProperty("缺勤原因") @TableField("reason") private String reason; }
6.mapper和xml
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dormitory.dormitory_backend.entity.Attendance; import org.apache.ibatis.annotations.Mapper; @Mapper public interface AttendanceMapper extends BaseMapper<Attendance> { int insertAttendance(Attendance attendance); int deleteAttendance(Integer id); }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dormitory.dormitory_backend.mapper.AttendanceMapper"> <insert id="insertAttendance" parameterType="com.dormitory.dormitory_backend.entity.Attendance"> insert into t_attendance(user_account,reason) values(#{userAccount},#{reason}) </insert> <delete id="deleteAttendance"> delete from t_attendance where id = #{id} </delete> </mapper>
7.service和impl
public interface AttendanceService { int addAttendance(Attendance attendance); int deleteAttendance(Integer id); }
import com.dormitory.dormitory_backend.entity.Attendance; import com.dormitory.dormitory_backend.mapper.AttendanceMapper; import com.dormitory.dormitory_backend.service.AttendanceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class AttendanceServiceImpl implements AttendanceService { @Autowired private AttendanceMapper attendanceMapper; /** * 自定義的新增方法 * @param attendance * @return */ @Override public int addAttendance(Attendance attendance) { int insert = attendanceMapper.insertAttendance(attendance); return insert; } /** * plus自帶的刪除方法 * @param id * @return */ @Override public int deleteAttendance(Integer id) { return attendanceMapper.deleteById(id); } }
8.controller
import com.dormitory.dormitory_backend.entity.Attendance; import com.dormitory.dormitory_backend.service.AttendanceService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/attendance") @Api(tags = {"考勤管理"}) public class AttendanceController { @Autowired private AttendanceService attendanceService; @PostMapping("/addAttendance") public int addAttendance(@RequestBody Attendance attendance){ int addAttendance = attendanceService.addAttendance(attendance); return addAttendance; } @DeleteMapping("/deleteAttendance") public int deleteAttendance(Integer id){ int addAttendance = attendanceService.deleteAttendance(id); return addAttendance; } }
9.實現(xiàn)
嘮一嘮:出現(xiàn)Invalid bound statement (not found)問題的原因可能有哪些
1.全局配置文件沒配好?
檢查全局配置文件application.properties或application.yml是否配置掃描mapper包的文件路徑
#mybatis配置mapper文件路徑 #mybatis.mapper-locations=classpath:/mapper/*.xml #mybatis-plus配置mapper文件路徑 mybatis-plus.mapper-locations=classpath:/mapper/*.xml
2.啟動類沒加包掃描注解 ?
檢查啟動類上是否添加包掃描注解
@SpringBootApplication @MapperScan("項目路徑.mapper") public class DormitoryBackendApplication { public static void main(String[] args) { SpringApplication.run(DormitoryBackendApplication.class, args); }
3.沒使用@Mapper注解?
XXXmapper.java類是否使用@Mapper注解
@Mapper public interface AttendanceMapper extends BaseMapper<Attendance> {}
4.命名空間不正確?
檢查XXXmapper.xml的命名空間是否正確,是否能跳轉到對應的XXXmapper.java
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dormitory.dormitory_backend.mapper.AttendanceMapper"></mapper>
正常能跳轉會有箭頭圖標,點擊能跳轉(下載一個插件)
到此這篇關于SpringBoot3.3.X整合Mybatis-Plus的實現(xiàn)示例的文章就介紹到這了,更多相關SpringBoot3.3.X整合Mybatis-Plus內容請搜索腳本之家以
- SpringBoot整合Mybatis-plus實現(xiàn)多級評論功能
- SpringBoot3整合mybatis-plus的實現(xiàn)
- Springboot3整合Mybatis-plus3.5.3報錯問題解決
- SpringBoot整合mybatis-plus實現(xiàn)分頁查詢功能
- springboot3.2整合mybatis-plus詳細代碼示例
- SpringBoot3和mybatis-plus整合出現(xiàn)的問題解決辦法
- SpringBoot3.2.2整合MyBatis-Plus3.5.5依賴不兼容的問題解決
- SpringBoot整合Mybatis-Plus實現(xiàn)關聯(lián)查詢
- 全網(wǎng)最新springboot整合mybatis-plus的過程
相關文章
springboot集成mybatisPlus+多數(shù)據(jù)源的實現(xiàn)示例
這篇文章主要介紹了springboot集成mybatisPlus+多數(shù)據(jù)源的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-125分鐘搭建SpringCloud Eureka服務注冊中心的實現(xiàn)
這篇文章主要介紹了5分鐘搭建SpringCloud Eureka服務注冊中心的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03Java的Finalizer引發(fā)的內存溢出問題及解決
本文介紹了Java中的Finalizer機制,解釋了當類實現(xiàn)finalize()方法時,JVM的行為和潛在的風險,通過一個示例程序,展示了實現(xiàn)finalize()方法會導致大量對象存活,最終引發(fā)OutOfMemoryError,文章分析了GC日志,解釋了Finalizer線程和主線程之間的競爭2025-03-03在SpringBoot微服務中設置和管理多個數(shù)據(jù)庫的代碼示例
在現(xiàn)代微服務架構中,通常需要與多個數(shù)據(jù)庫交互的服務,這可能是由于各種原因,例如遺留系統(tǒng)集成、不同類型的數(shù)據(jù)存儲需求,或者僅僅是為了優(yōu)化性能,在本綜合指南中,我們將探討如何在 Spring Boot 微服務中設置和管理多個數(shù)據(jù)庫連接,需要的朋友可以參考下2024-12-12Java分布式鎖、分布式ID和分布式事務的實現(xiàn)方案
在分布式系統(tǒng)中,分布式鎖、分布式ID和分布式事務是常用的組件,用于解決并發(fā)控制、唯一標識和數(shù)據(jù)一致性的問題,本文將介紹Java中常用的分布式鎖、分布式ID和分布式事務的實現(xiàn)方案,并通過具體的示例代碼演示它們的用法和應用場景2023-06-06SpringBoot監(jiān)控模塊Actuator的用法詳解
Spring?Boot?Actuator?是?Spring?Boot?自帶的一個功能模塊,提供了一組已經(jīng)開箱即用的生產環(huán)境下常用的特性和服務,比如應用程序的健康檢查、信息暴露、度量收集、日志記錄等,本文將給大家詳細SpringBoot監(jiān)控模塊Actuator的用法2023-06-06