最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3.3.X整合Mybatis-Plus的實(shí)現(xiàn)示例

 更新時(shí)間:2025年03月04日 09:31:16   作者:梅禿頭  
本文介紹了在Spring Boot 3.3.2中整合MyBatis-Plus 3.5.7,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前提說明:

項(xiàng)目的springboot版本為:<version>3.3.2</version>

需要整合的mybatis-plus版本:<version>3.5.7</version>

廢話不多說,開始造吧

1.準(zhǔn)備好數(shù)據(jù)庫和表

2.配置全局文件

application.properties或者是application.yml(配置mapper的映射文件路徑)

我這里是application.properties,配置如下:

#配置服務(wù)器端口號(hào)
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.啟動(dòng)類配置包掃描注解和路徑信息

配置之前先看下我這邊的包結(jié)構(gòu)

啟動(dòng)類,造吧?找到有@SpringBootApplication注解的類就是了,在其位置加上包掃描注解@MapperScan("com.dormitory.dormitory_backend.mapper")

注意括號(hào)里面的內(nèi)容需要根據(jù)自己的包結(jié)構(gòu)來配置,com.dormitory.dormitory_backend是我的包結(jié)構(gòu),主要看java,實(shí)在不懂,那就任意打開一個(gè)XXXmapper.java文件,看其包結(jié)構(gòu),框起來的一整個(gè)復(fù)制粘貼上去就可以了

4.導(dǎo)入依賴

無效依賴---我嘗試過導(dǎo)入網(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>

至于為什么說是無效依賴,導(dǎo)入以上的依賴無法使用mybatis-plus自帶的方法

發(fā)送請求時(shí),后臺(tái)產(chǎn)生以下報(bào)錯(cuò):

Invalid bound statement (not found): com.dormitory.dormitory_backend.mapper.AttendanceMapper.deleteById

AttendanceMapper的deleteById方法是無效的綁定語句,也就是,無法識(shí)別到mybatis-plus自帶的刪除方法,但是可以識(shí)別自定義的mapper語句,能正常進(jìn)行增刪改查,也就是原mybatis的寫法唄,但是,我想快速實(shí)現(xiàn)CRUD??!于是,網(wǎng)上找了一個(gè)解決的方法,配置一個(gè)類,請看下文:

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)自動(dòng)加載的資源。不手動(dò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ù)庫字段設(shè)計(jì)為駝峰命名,默認(rèn)開啟的駝峰轉(zhuǎn)下劃線會(huì)報(bào)錯(cuò)字段找不到
        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;
    }
}

配置了這個(gè)類,確實(shí)是可以使用mybatis-plus自帶的方法,但是自己寫的方法卻無法實(shí)現(xiàn)了

實(shí)現(xiàn)配置類后,請求自定義的新增方法:

實(shí)現(xiàn)配置類后,請求mybatis-plus自帶的刪除方法:

幾經(jīng)輾轉(zhuǎn),發(fā)現(xiàn)導(dǎo)入以下這個(gè)依賴可以實(shí)現(xiàn)同時(shí)使用自定義方法和mybatis-plus自帶方法,注意:需要?jiǎng)h除MybatisPlusConfig類,以及將原先導(dǎo)入的三個(gè)依賴替換成新的依賴就可以了

有效依賴---導(dǎo)入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.實(shí)現(xiàn)表對應(yīng)的實(shí)體類

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("賬號(hào)(學(xué)號(hào))")
    @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.實(shí)現(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.啟動(dòng)類沒加包掃描注解 ?

檢查啟動(dòng)類上是否添加包掃描注解 

@SpringBootApplication
@MapperScan("項(xiàng)目路徑.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的命名空間是否正確,是否能跳轉(zhuǎn)到對應(yīng)的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>

正常能跳轉(zhuǎn)會(huì)有箭頭圖標(biāo),點(diǎn)擊能跳轉(zhuǎn)(下載一個(gè)插件)

到此這篇關(guān)于SpringBoot3.3.X整合Mybatis-Plus的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot3.3.X整合Mybatis-Plus內(nèi)容請搜索腳本之家以

相關(guān)文章

  • 詳解Java單元測試之Junit框架使用教程

    詳解Java單元測試之Junit框架使用教程

    單元測試就是針對最小的功能單元編寫測試代碼,Junit是使用Java語言實(shí)現(xiàn)的單元測試框架,它是開源的,Java開發(fā)者都應(yīng)當(dāng)學(xué)習(xí)并使用Junit編寫單元測試。本文就來講講Junit框架的使用教程,需要的可以參考一下
    2022-05-05
  • Java線上死鎖問題從定位到解決的全鏈路指南

    Java線上死鎖問題從定位到解決的全鏈路指南

    在分布式系統(tǒng)高并發(fā)場景下,死鎖如同定時(shí)炸彈,隨時(shí)可能引發(fā)服務(wù)雪崩,本文將分享一套完整的死鎖應(yīng)對策略,結(jié)合實(shí)戰(zhàn)案例與生產(chǎn)級(jí)解決方案,助你快速化解危機(jī),需要的朋友可以參考下
    2025-06-06
  • SpringCloud Config配置加密解密用法解析

    SpringCloud Config配置加密解密用法解析

    這篇文章主要介紹了SpringCloud Config配置加密解密用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • JavaMail入門教程之創(chuàng)建郵件(2)

    JavaMail入門教程之創(chuàng)建郵件(2)

    這篇文章主要介紹了JavaMail入門教程之創(chuàng)建郵件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java中sharding-jdbc按年月分片的示例代碼

    Java中sharding-jdbc按年月分片的示例代碼

    本文主要介紹了Java中sharding-jdbc按年月分片的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Javase隨機(jī)數(shù)類、日期類、包裝類的基礎(chǔ)知識(shí)示例詳解

    Javase隨機(jī)數(shù)類、日期類、包裝類的基礎(chǔ)知識(shí)示例詳解

    我們在開發(fā)時(shí),除了操作一些固定的數(shù)字之外,有時(shí)候還要操作一些不確定的隨機(jī)數(shù),這篇文章主要介紹了Javase隨機(jī)數(shù)類、日期類、包裝類的基礎(chǔ)知識(shí),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • SpringBoot 整合 Shiro 密碼登錄與郵件驗(yàn)證碼登錄功能(多 Realm 認(rèn)證)

    SpringBoot 整合 Shiro 密碼登錄與郵件驗(yàn)證碼登錄功能(多 Realm 認(rèn)證)

    這篇文章主要介紹了SpringBoot 整合 Shiro 密碼登錄與郵件驗(yàn)證碼登錄(多 Realm 認(rèn)證),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 詳解mysql插入數(shù)據(jù)后返回自增ID的七種方法

    詳解mysql插入數(shù)據(jù)后返回自增ID的七種方法

    這篇文章主要介紹了詳解mysql插入數(shù)據(jù)后返回自增ID的七種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 如何將Java對象轉(zhuǎn)換為JSON實(shí)例詳解

    如何將Java對象轉(zhuǎn)換為JSON實(shí)例詳解

    有時(shí)候需要將對象轉(zhuǎn)換為JSON格式,所以這篇文章主要給大家介紹了關(guān)于如何將Java對象轉(zhuǎn)換為JSON的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 深入淺出講解Spring框架中依賴注入與控制反轉(zhuǎn)及應(yīng)用

    深入淺出講解Spring框架中依賴注入與控制反轉(zhuǎn)及應(yīng)用

    依賴注入(Dependency?Injection)和控制反轉(zhuǎn)(Inversion?of?Control)是同一個(gè)概念。具體含義是:當(dāng)某個(gè)角色(可能是一個(gè)Java實(shí)例,調(diào)用者)需要另一個(gè)角色(另一個(gè)Java實(shí)例,被調(diào)用者)的協(xié)助時(shí),在?傳統(tǒng)的程序設(shè)計(jì)過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實(shí)例
    2022-03-03

最新評(píng)論

荆门市| 礼泉县| 江川县| 石首市| 峨边| 濉溪县| 始兴县| 女性| 额济纳旗| 丹江口市| 玉门市| 弋阳县| 彰武县| 阳曲县| 蒲江县| 原阳县| 阿坝县| 成武县| 纳雍县| 华安县| 临城县| 理塘县| 天门市| 郑州市| 繁峙县| 华容县| 遂溪县| 社旗县| 昌邑市| 临邑县| 喀喇沁旗| 隆德县| 都江堰市| 浏阳市| 关岭| 青河县| 奉节县| 西乌珠穆沁旗| 南平市| 勐海县| 丰宁|