SpringBoot + MybatisPlus

news2025/3/17 0:37:04

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 {

    @Autowired
    public 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 {

    @Override
    public TestInfo selectById1(String id) {
        return baseMapper.selectById1(id);
    }

    @Override
    public void insertTestInfo(TestInfo testInfo) {
        baseMapper.insert(testInfo);
    }

    @Override
    public void deleteTestInfo(Long id) {
        baseMapper.deleteById(id);
    }

    @Override
    public 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.Driver
    username: root
    password: root123456
    url: jdbc:mysql://localhost:3306/SD_DB?useSSL=false&serverTimezone=Asia/Shanghai
mybatis-plus:
  # 指定 MyBatis Mapper 对应的 XML 文件位置
  mapper-locations: classpath*:com/fan/sd/demos/**/xml/*.xml
  configuration:
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 返回类型为Map,显示null对应的字段
    call-setters-on-nulls: true
    jdbc-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.coloradmin.cn/o/1695030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

民国漫画杂志《时代漫画》第16期.PDF

时代漫画16.PDF: https://url03.ctfile.com/f/1779803-1248612470-6a05f0?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;

Jenkins在windows上进行安装

今天为了实现jmeter接口测试脚本的持续性集成安装了jenkins&#xff0c;主要记录jenkins的安装和端口的修改。 前提条件&#xff1a;安装了jdk&#xff0c;我本机安装的jdk1.8。 1.下载jenkins安装包 安装jenkins我们需要先下载安装包&#xff0c;可以通过下面的链接进行下载&a…

深入理解内联函数(C语言)

目录 1.什么是内联函数2.内联函数与宏3.编译器对内联函数的处理4.参考文献 1.什么是内联函数 很多人都会知道&#xff0c;可以将比较小的函数写成内联函数的形式&#xff0c;这样会节省函数调用的开销&#xff0c;具体是什么样的开销呢&#xff1f; 一个函数在执行过程中&…

低利率之后如何选择?以日本养老金为例

天风证券认为&#xff0c;日本养老金资产配置行为具备的关键特征包括&#xff1a;海外资产占比上升、日元境内资产占比下降&#xff1b;权益类&#xff08;包括境内和境外&#xff09;占比上升&#xff0c;等等。 日本从1990年代开始陷入低增长、低通胀的局面&#xff0c;我们以…

解决win系统msvcp140.dll丢失的多种常用方法,亲测有效!

msvcp140.dll 是一个重要的Windows系统文件&#xff0c;属于Microsoft Visual C Redistributable runtime components的一部分&#xff0c;特别与Visual Studio 2015及之后版本编译的C应用程序相关联。这个动态链接库&#xff08;DLL&#xff09;文件包含了一系列C标准库的功能…

好用的window粘贴板

可以设置指定的快捷键&#xff0c;在需要使用最近复制的记录时快速的复用 -> Ditto。 选择Download即可 地址&#xff1a;Ditto clipboard manager (sourceforge.io)https://ditto-cp.sourceforge.io/

VUE3+Vite+vant4从零开始构建前端项目

VUE3Vitevant4从零开始构建前端项目 1. 环境准备Node.js 安装 2. Vite 构建项目3. 集成Vant41. 安装Vant 组件2. 引入组件3. 使用vant按钮组件 1. 环境准备 Node.js 安装 Node.js官网地址&#xff1a;https://nodejs.p2hp.com/ 下载最新的版本&#xff0c;下载文件为msi结尾的…

用本地大模型(llama3)进行数据分类标记|LLM 用例

001&#xff5c;背景 这是我最新发布的导航站点 https://aiwith.me 这个站点由于第一版数据来源于第三方&#xff0c;只有站点基础数据&#xff0c;没有对数据进行分类&#xff0c;最近站点上线了&#xff0c;主体框架都搭建完成了&#xff0c;这才有空去对数据做分类. 目前的…

Android kotlin协程

说明 可代替线程整异步可控制&#xff0c;灵活 &#xff08;控制优先级&#xff0c;内存占用等&#xff09;速度快 效率高有数量上限 使用 runBlocking 一般用于测试 不建议使用GlobalScope.launch 全局的 生命周期跟随application 不建议使用CoroutineScope(job) 用 基本使…

C结构详解

目录 1、结构模板 1. 建立结构声明 2. 定义结构变量 3. 访问结构成员 4. 初始化结构 声明结构数组 声明和初始化结构指针 1、结构模板 1. 建立结构声明 struct book{char title[MAXTITL];char author[MAXAUTL];float value; }&#xff1b; 该声明描述了一个又两个字符…

指北者智能音乐学习机隆重亮相广州国际乐器展

2024年5月23-26日广州国际乐器展览会在广交会展馆B区隆重开幕&#xff0c;本届展会开设5大展厅、50000平方米的主题展区&#xff0c;吸引了700多家国内外参展商参展&#xff0c;打造集展示、商贸、文化交流、文娱于一体的广阔平台。深圳市指北科技有限公司也携旗下品牌指北者智…

plt多子图设置

import matplotlib.pyplot as plt# 使用 subplots 函数创建一个 2x3 的子图网格 fig, axs plt.subplots(nrows2, ncols3, figsize(16, 10)) # 调整 figsize 来改变图像大小# 遍历每个子图&#xff0c;并绘制一些内容&#xff08;这里只是简单的示例&#xff09; for ax in ax…

leetcode230 二叉搜索树中第K小的元素

题目 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例 输入&#xff1a;root [5,3,6,2,4,null,null,1], k 3 输出&#xff1a;3 解析 这道题应该是能做出…

计算机网络-BGP概述

一、概述 到目前为止我们已经学习了静态路由、OSPF、RIP、IS-IS了&#xff0c;前面我们也了解到按照区域或者范围来分&#xff0c;路由协议可以划分为&#xff1a;IGP内部网关协议、EGP外部网关协议&#xff0c;而我们前面学习的动态路由都属于IGP的范畴. IGP是用于单一自治系统…

AI大模型探索之路-训练篇25:ChatGLM3微调实战-基于LLaMA-Factory微调改造企业级知识库

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

NetSuite Intercompany COGS科目设置问题

在22年底的NetSuite多公司功能串讲中&#xff0c;有一个题目是Intercompany COGS科目的设置问题。近期在项目上这个问题被密集讨论。为了方便分享&#xff0c;所以在此摘出来独立成文。有兴趣的同学也可以翻看之前的视频。 NetSuite知识会 第8谈 多公司功能串讲 NetSuite Inter…

性能测试--线程的监控

1.线程的状态 1.1.线程的5种状态 java的线程总共有5种状态&#xff0c;如下&#xff1a; * 新建&#xff1a;new 【新建之后不启用都是new】* 运行&#xff1a;runnable* 等待&#xff1a;waitting(无限期等待),timed waitting(限期等待)* 阻塞&#xff1a;blocked* 结束&am…

1.存储部分

1.Flash Memory--闪速存储器&#xff08;注&#xff1a;U盘&#xff0c;SD卡就是闪存&#xff09;在EEPROM基础上发展而来的&#xff0c;断电后也能保存信息&#xff0c;且可进行多次 快速擦除重写。注意&#xff1a;由于闪存需要先擦除再写入&#xff0c;因此闪存写的速度要比…

[less配置]vue2引入less

1、终端输入&#xff1a;npm install less less-loader --save-dev 2、在package.json查看是否安装less依赖 3、调用

Add object from object library 从对象库中添加内置器件

Add object from object library 从对象库中添加内置器件 正文正文 对于 Lumerical,有些时候我们在使用中,可能需要从 Object library 中添加器件,通常我们的做法是手动添加。如下图所示,我们添加一个 Directional Coupler 到我们的工程文件中: 但是这种操作方式不够智能…