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.mzph.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;今天为大家分享一个快速开发接私活神器。 一、项目介绍 人人开源是一个提供多种…

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 会被频…

Linux基础(六):Linux 系统上 C 程序的编译与调试

本篇博客详细分析&#xff0c;Linux平台上C程序的编译过程与调试方法&#xff0c;这也是我们后续程序开发的基础。 目录 一、第一个hello world程序 1.1 创建.c文件 1.2 编译链接 运行可执行程序 二、编译链接过程 2.1 预编译阶段 2.2 编译阶段 2.3 汇编阶段 2.4 链…

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 …

存储+调优:存储-IP-SAN-EXTENSION

存储调优&#xff1a;存储-IP-SAN-EXTENSION 文件系统的锁标记 GFS&#xff08;锁表空间&#xff09; ----------- ------------ ------------- 节点 | ndoe1 | | node2 | | node3 | ---------- ------…

GNSS中的多路径效应原理及计算方法

1 多路径效应原理 图1 多路径效应原理图 2 计算方法 如需原文&#xff0c;可加多源融合定位与智能控制讨论群获取,QQ群号&#xff1a;51885949

【OceanBase诊断调优】—— 直连普通租户时遇到报错:Tenant not in this server

本文介绍了直连 OceanBase 数据库中的普通租户时&#xff0c;出现报错&#xff1a;ERROR 5150 (HY000) : Tenant not in this server 的处理方法。 问题描述 在 n-n 或者 n-n-n (n>1) 的部署架构中&#xff0c;使用 2881 端口 直连 OceanBase 集群的普通租户&#xff0c;可…

SpringBoot运维篇(打包,多环境,日志)

文章目录 一、SpringBoot程序的打包与运行二、配置高级三、多环境开发四、日志 一、SpringBoot程序的打包与运行 刚开始做开发学习的小伙伴可能在有一个知识上面有错误的认知&#xff0c;我们天天写程序是在Idea下写的&#xff0c;运行也是在Idea下运行的。 ​但是实际开发完成…

CDH6.3.2集成Flink1.17

直接运行脚本即可&#xff0c;一键输出相关依赖包 运行步骤已给到文档 下载地址

Html基础笔记

Html超文本标记语言 (HyperText Markup Language) 超文本 指的是网页中可以显示的内容(图片,超链接,视频,) 标记语言 标记–>标签(标注) 例如:买东西的时候—>商品具有标签,看到标签就知道商品的属性(价格,材质,型号等,) 标记语言就是提供了很多的标签,不同的标签…

若依框架对于后端返回异常后怎么处理?

1、后端返回自定义异常serviceException 2、触发该异常后返回json数据 因为若依对请求和响应都封装了&#xff0c;所以根据返回值response获取不到Code值但若依提供了一个catch方法用来捕获返回异常的数据 3、处理的方法