SpringBoot + MybatisPlus

SpringBoot + MybatisPlus 整合記錄

  • 1. 硬件軟件基本信息
  • 2. 相關鏈接
  • 3. 通過idea快速生成一個Springboot項目
  • 4. 啟動報錯問題解決
    • 問題一:Springboot啟動的時候報錯提示 “沒有符合條件的Bean關于Mapper類型”
    • 問題二:啟動的時候提示需要一個Bean,但是發現了兩個Bean
    • 問題三:沒有找到對應的statement

1. 硬件軟件基本信息

2. 相關鏈接

JDK1.8.0_361下載地址
Maven-3.9.6 下載地址
Mybatis-Plus 官方文檔

3. 通過idea快速生成一個Springboot項目

大致快速生成springBoot項目的有兩種方法
方式一:使用maven生成
方式二:使用springBoot生成
我這里直接選用第二種,第一種可以 點擊鏈接 學習學習
注意事項:
如果想生成 JDK8 的項目但是下拉沒有這個版本:
那是因為 Spring2.X 版本在2023年11月24日停止維護了,因此創建 Spring 項目時不再有 2.X 版本的選項,只能從 3.1.X 版本開始選擇,而 Spring3.X 版本不支持 JDK8,JDK11,最低支持JDK17,因此 JDK11 也無法選擇了。
所以需要替換服務地址為阿里云的就可以了
初始地址Server URL:http://start.springboot.io/
替換地址Server URL:https://start.aliyun.com/
在這里插入圖片描述
點擊下一步然后選擇需要初始化的依賴了,一般就spring web,lombok等等,其他的就基本上需要啥就自己添加上,一般還有mysql,mybatis,不過我們有mybatis-plus,就不需要mybatis的依賴了
最后點擊create就可以完成一個Springboot項目的創建了
在這里插入圖片描述
目錄結構
這里我簡單的創建了Controller,Service,Mapper等目錄,結構如下
在這里插入圖片描述
Controller 代碼如下

package com.fan.sd.demos.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fan.sd.demos.VO.TestInfo;
import com.fan.sd.demos.service.ITestInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping(value = "/testInfo")
public class TestInfoController {@Autowiredpublic ITestInfoService iTestInfoService;@PostMapping("getTestInfo")public TestInfo getTestInfo() {// 使用Wrapper進行快速查詢// LambdaQueryWrapper<TestInfo> queryWrapper = new LambdaQueryWrapper<>();// queryWrapper.eq(TestInfo::getId,"1");// return iTestInfoService.getOne(queryWrapper);return iTestInfoService.selectById1("1");}}

接口類信息如下
接口類要繼承 IService 類

package com.fan.sd.demos.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.fan.sd.demos.VO.TestInfo;public interface ITestInfoService extends IService<TestInfo> {/*** 查詢測試信息*/TestInfo selectById1(String id);/*** 插入測試信息*/void insertTestInfo(TestInfo testInfo);/*** 刪除測試信息*/void deleteTestInfo(Long id);/*** 修改測試信息*/void updateTestInfo(TestInfo testInfo);
}

實現類信息如下
這里實現類要實現接口類,然后繼承Mybatis-Plus的 ServiceImpl 類

package com.fan.sd.demos.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fan.sd.demos.VO.TestInfo;
import com.fan.sd.demos.mapper.TestInfoMapper;
import com.fan.sd.demos.service.ITestInfoService;
import org.springframework.stereotype.Service;@Service
public class TestInfoServiceImp extends ServiceImpl<TestInfoMapper, TestInfo> implements ITestInfoService {@Overridepublic TestInfo selectById1(String id) {return baseMapper.selectById1(id);}@Overridepublic void insertTestInfo(TestInfo testInfo) {baseMapper.insert(testInfo);}@Overridepublic void deleteTestInfo(Long id) {baseMapper.deleteById(id);}@Overridepublic void updateTestInfo(TestInfo testInfo) {baseMapper.updateById(testInfo);}
}

mapper類信息如下
繼承mybatisPlus的 BaseMapper 類就可以了

package com.fan.sd.demos.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fan.sd.demos.VO.TestInfo;public interface TestInfoMapper extends BaseMapper<TestInfo> {TestInfo selectById1(String id);}

mapper.xml代碼如下
注意一下 namespace 和 Id 就可以了,不過現在有MybatisCodeHelpPro插件,基本上沒有對應不上的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fan.sd.demos.mapper.TestInfoMapper"><select id="selectById1" resultType="com.fan.sd.demos.VO.TestInfo">select * from test_info_table where id = #{id}</select></mapper>

4. 啟動報錯問題解決

問題一:Springboot啟動的時候報錯提示 “沒有符合條件的Bean關于Mapper類型”

在這里插入圖片描述
這是因為啟動的時候沒有掃描對應的 Mapper 文件,所以沒有生成對應的 bean 在 spring 容器中管理
我們只需要在啟動類上加上注解 @MaaperSacn(“路徑”)
在這里插入圖片描述

問題二:啟動的時候提示需要一個Bean,但是發現了兩個Bean

在這里插入圖片描述
我們進入Controller看看,鼠標移上去,很有意思的提示,@autowired找到兩個Bean,但是在整個項目中ITestInfoService是接口類,而TestInfoServiceImpl是其實現類,
在這里插入圖片描述
這是由于MapperScan的路徑設置不當(屬于強行承上啟下了),將 MapperScan 的搜索范圍擴大了,導致項目下所有包的接口都創建了一個實現類,因此在使用 @Autowired 后,對Service層的依賴注入就會找到兩個Bean(一個Service接口本身,一個Service接口實現類)。
所以我們把Mapper掃描的配置路徑寫的顆粒度更細一點,就可以解決了
在這里插入圖片描述

問題三:沒有找到對應的statement

剛剛通過配置 MapperScan 掃描,解決了 mapper 沒有生成bean在 Spring 容器中管理,現在成功啟動,但是調用 mapper 里面的方法的時候又報這個錯,網上檢查什么 namespace 啊,檢查 id 什么之類的,現在都是有插件幫我們檢查好了,什么不對應的一紅就知道了,所以這些也沒必要檢查。
在這里插入圖片描述
這里主要的原因有兩個
第一個原因:
我放的xml的目錄位置問題,正常來說存放在 Resources/mapper/ *.xml 路徑下,但是我們的項目基本上都是多模塊項目,為了方便管理對應的 mapper 文件,我都是喜歡放在 mapper/xml/ *.xml 路徑下面。所以這里需要有個對應的配置,具體配置如下

# 服務端口
server:port: 8080
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root123456url: jdbc:mysql://localhost:3306/SD_DB?useSSL=false&serverTimezone=Asia/Shanghai
mybatis-plus:# 指定 MyBatis Mapper 對應的 XML 文件位置mapper-locations: classpath*:com/fan/sd/demos/**/xml/*.xmlconfiguration:# 這個配置會將執行的sql打印出來,在開發或測試的時候可以用log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 返回類型為Map,顯示null對應的字段call-setters-on-nulls: truejdbc-type-for-null: 'null'

第二個原因:
可以查看一下生成的 target 文件目錄,然后會發現根本都沒有xml目錄以及對應的mapper.xml文件,那肯定會報這個問題的。
在這里插入圖片描述
主要原因是我們啟動項目或者打包項目的時候,默認只會編譯src/main/java下面的class文件,對應的一些xml等靜態文件是不會打包編譯的,所以我們這里就需要在pom文件里面設置一下
具體配置信息如下,最后Maven刷新一下,就可以正常編譯了

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.fan</groupId><artifactId>SD</artifactId><version>0.0.1-SNAPSHOT</version><name>SD</name><description>SD</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><djl.version>0.20.0</djl.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-services</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 在 <dependencies> 區域內添加 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version> <!-- 替換為最新版本 --></dependency><!-- druid數據庫連接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.fan.sd.SdApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins><!-- 項目打包時會將java目錄中的*.xml文件也進行打包 --><resources><resource><directory>src/main/resources</directory><filtering>false</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include><include>**/*.json</include><include>**/*.ftl</include></includes><filtering>false</filtering></resource></resources></build>
</project>

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

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

相關文章

電磁仿真--CST網格介紹

1. 簡介 網格會影響仿真的準確性和速度&#xff0c;花時間理解網格化過程是很重要的。 CST 中可用的數值方法包括FIT、TLM、FEM、MoM&#xff0c;使用不同類型的網格&#xff1a; FIT和TLM&#xff1a;六面體 FEM&#xff1a;四面體、平面 MoM&#xff1a;表面 CFD&#…

深入理解與防御跨站腳本攻擊(XSS):從搭建實驗環境到實戰演練的全面教程

跨站腳本攻擊&#xff08;XSS&#xff09;是一種常見的網絡攻擊手段&#xff0c;它允許攻擊者在受害者的瀏覽器中執行惡意腳本。以下是一個XSS攻擊的實操教程&#xff0c;包括搭建實驗環境、編寫測試程序代碼、挖掘和攻擊XSS漏洞的步驟。 搭建實驗環境 1. 安裝DVWA&#xff…

【408真題】2009-16

“接”是針對題目進行必要的分析&#xff0c;比較簡略&#xff1b; “化”是對題目中所涉及到的知識點進行詳細解釋&#xff1b; “發”是對此題型的解題套路總結&#xff0c;并結合歷年真題或者典型例題進行運用。 涉及到的知識全部來源于王道各科教材&#xff08;2025版&…

推薦一個快速開發接私活神器

文章目錄 前言一、項目介紹二、項目地址三、功能介紹四、頁面顯示登錄頁面菜單管理圖表展示定時任務管理用戶管理代碼生成 五、視頻講解總結 前言 大家好&#xff01;我是智航云科技&#xff0c;今天為大家分享一個快速開發接私活神器。 一、項目介紹 人人開源是一個提供多種…

SCSS配置教程

SCSS&#xff08;Sassy CSS&#xff09;是 Sass&#xff08;Syntactically Awesome Stylesheets&#xff09;的一種語法&#xff0c;它是一種 CSS 預處理器&#xff0c;允許你使用變量、嵌套規則、混合&#xff08;mixin&#xff09;、函數等高級功能來編寫 CSS&#xff0c;從而…

Golang | Leetcode Golang題解之第112題路徑總和

題目&#xff1a; 題解&#xff1a; func hasPathSum(root *TreeNode, sum int) bool {if root nil {return false}if root.Left nil && root.Right nil {return sum root.Val}return hasPathSum(root.Left, sum - root.Val) || hasPathSum(root.Right, sum - roo…

C++常見知識點總結

常見字符 * 注釋&#xff1a;/* 這是一個注釋*/乘法&#xff1a;a * b取值運算符&#xff1a;*指針變量&#xff0c;int a 4&#xff0c;*a &#xff1f;&#xff1f;&#xff1f;&#xff1f;指針變量&#xff1a;數據類型 *變量名&#xff0c; int *no &bh&#xff0…

SAP揭秘者-怎么執行生產訂單ATP檢查及其注意點

文章摘要&#xff1a; 上篇文章給大家介紹生產訂單ATP檢查的相關后臺配置&#xff0c;大家可以按照配置步驟去進行配置&#xff0c;配置完之后&#xff0c;我們接下來就是要執行ATP檢查。本篇文章具體給大家介紹怎么來執行生產 訂單ATP檢查及其注意點。 執行生產訂單ATP檢查的…

Qt for android 獲取USB設備列表(二)JNI方式 獲取

簡介 基于上篇 [Qt for android 獲取USB設備列表&#xff08;一&#xff09;Java方式 獲取]&#xff0c; 這篇就純粹多了&#xff0c; 直接將上篇代碼轉換成JNI方式即可。即所有的設備連接與上篇一致。 (https://listentome.blog.csdn.net/article/details/139205850) 關鍵代碼…

Android卡頓丟幀低內存與adb shell內存狀態

Android卡頓丟幀低內存與adb shell內存狀態 卡頓丟幀除了CPU/GPU層面&#xff0c;另外&#xff0c;也需要特別注意整機低內存情況。kswapd0 是一個內核工作線程&#xff0c;內存不足時會被喚醒&#xff0c;做內存回收工作。 當內存頻繁在低水位的時候&#xff0c;kswapd0 會被頻…

webgl three 項目常用操作

分組 const group1 new THREE.Group(); //所有高層樓的父對象group1.name "高層";for (let i 0; i < 5; i) {const geometry new THREE.BoxGeometry(20, 60, 10);const material new THREE.MeshLambertMaterial({color: 0x00ffff});const mesh new THREE.Me…

Linux基礎(六):Linux 系統上 C 程序的編譯與調試

本篇博客詳細分析&#xff0c;Linux平臺上C程序的編譯過程與調試方法&#xff0c;這也是我們后續程序開發的基礎。 目錄 一、第一個hello world程序 1.1 創建.c文件 1.2 編譯鏈接 運行可執行程序 二、編譯鏈接過程 2.1 預編譯階段 2.2 編譯階段 2.3 匯編階段 2.4 鏈…

一千題,No.0025(Chess For Three)

描述 Three friends gathered to play a few games of chess together. In every game, two of them play against each other. The winner gets 2 points while the loser gets 0, and in case of a draw, both players get 1 point each. Note that the same pair of playe…

【MySQL精通之路】SQL語句(3)-鎖和事務語句

目錄 1.START TRANSACTION、COMMIT和ROLLBACK語句 2.無法回滾的語句 3.導致隱含COMMIT的語句 4.SAVEPOINT、ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT語句 5.LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE語句 6.LOCK TABLE和UNLOCK TABLES語句 6.1 表鎖獲取 6.2 表鎖釋放…

qemu+gdb調試linux內核

打開CONFIG_DEBUG_INFO,編譯內核 通過圖形菜單配置該宏,執行make menuconfig。 kernel hacking —> compile-time checks and compiler options —> compile the kernel with debug info 驗證是否打開成功,grep -nr “CONFIG_DEBUG_INFO” .config。 打開成功,然后…

plsql 學習

過程化編程語言 賦值&#xff1a;&#xff1a; ||&#xff1a;連接符號 dbms_output.put_line() :輸出的語句 var_name ACCOUNTLIBRARY.USERNAME%type; 變量名&#xff1b;某個表的數據類型&#xff1b;賦值給變量名 用下面的方法更好用 異常exception 循…

力扣HOT100 - 75. 顏色分類

解題思路&#xff1a; 單指針&#xff0c;對數組進行兩次遍歷。 class Solution {public void sortColors(int[] nums) {int p 0;int n nums.length;for (int i 0; i < n; i) {if (nums[i] 0) {int tmp nums[i];nums[i] nums[p];nums[p] tmp;p;}}for (int i p; i …

java庫和包的概念

在Java中&#xff0c;"庫"和"包"是兩個不同的概念&#xff0c;但它們之間存在著密切的關聯。 庫&#xff08;Library&#xff09; 定義&#xff1a;庫是一組已經編寫好的代碼和資源&#xff0c;用于解決特定的問題或提供特定的功能。它可以包含一個或多個…

【前端每日基礎】day19——回調函數

回調函數 回調函數是一種常見的編程概念&#xff0c;它是指在函數執行完畢后&#xff0c;將另一個函數作為參數傳遞給它&#xff0c;以便在特定條件滿足時調用這個函數。回調函數通常用于處理異步操作、事件處理、定時器等場景&#xff0c;以實現非阻塞式的程序設計。 特點和…

存儲+調優:存儲-IP-SAN-EXTENSION

存儲調優&#xff1a;存儲-IP-SAN-EXTENSION 文件系統的鎖標記 GFS&#xff08;鎖表空間&#xff09; ----------- ------------ ------------- 節點 | ndoe1 | | node2 | | node3 | ---------- ------…