Springboot mybatis常见配置问题解决

下面是Springboot MyBatis常见配置问题解决的完整攻略。

问题一:MyBatis的Mapper不能正常映射数据库表

原因

由于 Mapper 文件和数据库表的对应关系没有处理好,MyBatis 执行时会找不到对应的表或列,导致不能正常映射。

解决方案

  1. 确认数据库配置是否正确,包括数据库名称、端口、用户名、密码等。

  2. 确认 Mapper 文件的命名是否一致并正确导入,例如:xxxMapper.xml、xxxMapper.java。

    如果使用了通配符代替包名导入,需要确认通配符是否正确,语句示例:

    xml
    <mapper class="com.example.*.mapper.SomeMapper" />

    3. 确认 Mapper 文件中的 SQL 语句是否正确,包括 SQL 语句是否和数据库表字段一一对应、是否使用了正确的语法等。

示例

如果出现报错信息:Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'xxx' doesn't exist,则需要确认 Mapper 文件中定义的表名是否与数据库中的表名对应,例如:

<select id="selectById" resultType="com.example.demo.entity.Person">
    select * from user where id = #{id}
</select>

可以通过修改为:

<select id="selectById" resultType="com.example.demo.entity.Person">
    select * from person where id = #{id}
</select>

解决对应关系不对应带来的问题。

问题二:数据库连接池连接资源泄漏

原因

连接池未及时关闭导致的连接资源泄漏。

解决方案

在 MyBatis-SpringBoot-Starter 中可以配置连接池参数。一般设置了最大连接数和最小连接数,但连接池的连接超时时间、最大空闲连接时间等通常默认值是不可靠的,会造成连接资源泄漏。

推荐使用 Hikari 连接池,它有一个非常好的特性是自动关闭闲置连接,代码示例如下:

spring.datasource.hikari.data-source-properties.auto-commit=false
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=3

如上面的代码配置了连接池属性:

  • auto-commit=false,表示手动提交事务。
  • idle-timeout=60000,表示连接在池中空闲最长时间为60秒就会被清除并关闭,避免了空闲连接资源泄漏。
  • max-lifetime=1800000,表示连接最大生命周期为30分钟,在这个时间内没有被使用,则连接会被清除并关闭。
  • maximum-pool-size=10,表示连接池的最大连接数
  • minimum-idle=3,表示连接池的最小连接数,这里设置了3

示例

在当前项目中,配置了MySQL数据库和Hikari连接池,但在连接超时之后,MyBatis 无法从连接池中获取连接,导致程序出现连接池资源泄漏的异常。此时,需要将连接超时时间设置为合适的值,例如:

spring.datasource.hikari.data-source-properties.auto-commit=false
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=3

这样可以避免连接池资源泄漏,保证数据库连接的正常使用。

以上是Springboot Mybatis常见配置问题解决的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot mybatis常见配置问题解决 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 什么是 JIT 编译器?

    以下是关于JIT编译器的完整使用攻略: 什么是JIT编译器? JIT(Just-In-Time)编译器是一种在程序运行时将字节码编译成本地机器码的编译器。JIT编译器可以提高程序的执行速度,因为它可以将热点代码(即经常执行的代码)编译成本地机器码,从而避免了每次执行时都需要解释字节码的开销。 JIT编译器的优点 JIT编译器有以下优点: 提高程序的执行速度:…

    Java 2023年5月12日
    00
  • Spring中事务管理的四种方法(银行转账为例)

    请看我以下的详细讲解。 Spring中事务管理的四种方法 Spring中提供了四种常用的方式来管理事务,分别是: 通过AOP实现声明式事务管理 通过编程式事务管理 通过注解实现声明式事务管理 通过TransactionTemplate实现编程式事务管理 对于每种事务管理方式,我们将通过银行转账的例子进行说明。 1. 通过AOP实现声明式事务管理 在这种方式中…

    Java 2023年5月20日
    00
  • Java虚拟机GC日志分析

    下面是关于Java虚拟机GC日志分析的完整攻略: 什么是Java虚拟机GC日志 Java虚拟机的内存管理采用了分代垃圾收集的方式,GC日志是Java虚拟机在垃圾回收时所产生的日志,它里面包含了垃圾回收的很多相关信息,如垃圾回收的原因、结果、执行时间以及内存状态等。 获取GC日志 在使用Java虚拟机时,默认情况下并不会产生GC日志,需要手动开启才可以,一般有…

    Java 2023年5月26日
    00
  • Java 双指针项目中的实际应用

    背景说明 最近在做财务相关的系统,对账单核销预付款从技术角度来看就是将两个数组进行合并 对账单核销预付款前提条件: 对账单总金额必须等于未核销金额 数据示例 对账单数据 单号 金额 B0001 100 B0002 80 B0003 120 预付款数据 单号 未核销金额 PRE001 110 PRE002 190 结果数据 预付款单号 核销金额 对账单号 PR…

    Java 2023年5月4日
    00
  • Java代码审计的一些基础知识你知道吗

    Java代码审计的一些基础知识你知道吗 什么是Java代码审计? Java代码审计是指对Java应用程序中的源代码进行检查、识别和评估安全漏洞的过程。此过程旨在识别开发中可能导致安全漏洞的编程错误或不良实践。它可以帮助开发人员找到这些漏洞并修复它们,提高软件的安全性。 Java代码审计的步骤 阅读和理解代码。 理解应用程序的功能并确定期望行为。 寻找不安全的…

    Java 2023年5月23日
    00
  • Tomcat环境变量如何配置

    Tomcat是一个用于Java应用程序的Web服务器和Servlet容器。在使用Tomcat的过程中,为了保证Web应用程序的正常运行,需要正确地配置Tomcat环境变量。下面是配置Tomcat环境变量的完整攻略: 1. 下载和安装Tomcat 在开始配置Tomcat环境变量之前,我们首先需要下载和安装Tomcat。Tomcat的下载地址为:https://…

    Java 2023年5月19日
    00
  • springboot使用@data注解减少不必要代码

    使用Spring Boot可以大大简化Java Web应用程序的开发,使用@Data注解可通过Lombok框架来简化Java类代码。@Data注解通常包括常用注解,如@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor。这些注解可自动生成Java类的getter、sette…

    Java 2023年5月20日
    00
  • 基于Java8实现提高Excel读写效率

    基于Java8实现提高Excel读写效率 1. 导入依赖 我们可以使用Apache POI库来读写Excel,那么我们先来看一下如何在Java中导入Apache POI库的依赖。 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi<…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部