Springboot mybatis常见配置问题解决

yizhihongxing

下面是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日

相关文章

  • java list用法示例详解

    Java List用法示例详解 概述 Java中List是一个用于存储一组有序元素的接口,它是java.util包中的一个接口。List接口的实现类有ArrayList、LinkedList等,它们都是用于存储为一组有序元素的集合。本文将对Java中List的用法进行详细的介绍。 创建List 创建List的方法如下,其中“E”代表元素的类型。 List&l…

    Java 2023年5月26日
    00
  • SpringSecurity报错authenticationManager must be spec的解决

    针对Spring Security报错authenticationManager must be specified 的解决方案,一般来说可以从以下两方面入手: 1.在Spring Security配置文件中指定authenticationManager;2.在Spring Boot项目中添加配置类来注入authenticationManager。 1.指定…

    Java 2023年5月20日
    00
  • Java中的throw和throws关键字是什么?

    在Java中,throw和throws关键字都与异常处理有关。 throw关键字 throw是一个关键字,用于抛出一个异常对象。我们可以使用throw来手动抛出一个异常,这通常在程序出错时使用。 throw的使用形式如下: throw exception; 其中,exception代表需要抛出的异常对象。 下面是一个示例,假设我们要写一个方法来处理两个数的除…

    Java 2023年4月28日
    00
  • 浅谈Java动态代理的实现

    浅谈 Java 动态代理的实现 什么是动态代理? Java 中的代理分为静态代理和动态代理两种。静态代理需要事先写好代理类,通过程序员手动编写的方式,代理对象和目标对象之间的关系就已经确定了。而动态代理是在程序运行时动态生成的代理对象,不需要事先写好代理类。动态代理可以根据目标对象动态地生成代理对象,无需为每个目标对象都编写代理类,增强代码的可重用性。 实现…

    Java 2023年5月26日
    00
  • 详解SpringMVC——接收请求参数和页面传参

    详解SpringMVC——接收请求参数和页面传参 SpringMVC是一种基于MVC模式的Web框架,它可以帮助我们快速开发Web应用程序。在SpringMVC中,我们经常需要接收请求参数和页面传参。本文将详细介绍如何在SpringMVC中接收请求参数和页面传参,并提供两个示例说明。 接收请求参数 在SpringMVC中,我们可以使用@RequestPara…

    Java 2023年5月17日
    00
  • javascript仿163网盘无刷新文件上传系统

    下面是“javascript仿163网盘无刷新文件上传系统”的完整攻略: 一、准备工作 1.1 前端代码 在前端页面中添加如下代码片段: <form id="uploadForm" enctype="multipart/form-data"> <input type="file" …

    Java 2023年6月15日
    00
  • 什么是标记-清除算法?

    以下是关于标记-清除算法的详细讲解: 什么是标记-清除算法? 标记-清除算法是一种常见的垃圾回收算法,它的原理是在程序运行过程中,标记所有不再使用的内存空间,然后清除这些内存空间,从而回收内存空间。标记清除算法分为两个阶段:标记阶段和清除阶段。 标记阶段 在标记阶段,垃圾回收器会遍历所有的对象,标记所有不再使用的对象。标记的方式通常是在对象头中添加一个标记位…

    Java 2023年5月12日
    00
  • JavaWeb中导出excel文件的简单方法

    下面是JavaWeb中导出Excel文件的简单方法的完整攻略。 步骤一:导入相关的依赖 在项目中导出Excel文件,需要用到POI库。因此需要在pom.xml中导入相关的依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</…

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