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日

相关文章

  • Java之String类型的编码方式转换

    下面是“Java之String类型的编码方式转换”的完整攻略。 前言 在日常编程中,我们常常需要对字符串的编码方式进行转换。例如:我们从网络获取到的数据一般是以UTF-8编码的字符串,但是在本地的操作系统中,一些字符可能使用的是GBK编码。这个时候,我们就需要进行编码方式的转换,以保证数据的正确性。在Java中,我们可以使用String类的getBytes(…

    Java 2023年5月20日
    00
  • Java 实战项目锤炼之在线购书商城系统的实现流程

    Java 实战项目锤炼之在线购书商城系统的实现流程 项目概述 在这个项目中,您将使用Java技术构建一个在线购书商城,允许用户搜索、购买和评论图书。在开发过程中,您将学习并锤炼软件开发的实践技巧,包括需求分析、设计、实现和测试等流程。同时,您还将学到使用Java框架和技术实现Web应用程序的方法。 开发环境 该项目使用以下开发环境: JDK 1.8 Ecli…

    Java 2023年5月31日
    00
  • Java 字符串反转实现代码

    我来详细讲解一下“Java 字符串反转实现代码”的攻略。 什么是字符串反转 字符串反转是指将一个字符串的顺序颠倒过来,即从后往前读取原字符串。比如,将字符串“hello”反转后得到的字符串为“olleh”。 字符串反转的实现方法 Java 中字符串是不可变的对象,因此不能直接对字符串进行反转。我们可以通过将字符串转换为字符数组,并且进行字符数组的反转,最后再…

    Java 2023年5月27日
    00
  • Java内部类的使用教程详解

    Java内部类的使用教程详解 Java中的内部类是一个非常神奇的特性,它允许我们在一个Java类中定义另一个Java类。在这篇文章中,我们会详细讲解Java内部类的使用方法和注意事项。 内部类的类型 Java中的内部类分为四种类型:静态内部类、非静态内部类、局部内部类和匿名内部类。 静态内部类 静态内部类是定义在类中的普通静态类,可以像普通类一样使用。它可以…

    Java 2023年5月19日
    00
  • 教你1秒将本地SpringBoot项目jar包部署到Linux环境(超详细!)

    好,这里是“教你1秒将本地SpringBoot项目jar包部署到Linux环境(超详细!)”的完整攻略。 1. 前置条件 在开始操作前,需要准备好以下环境: 一台Linux服务器,能够连接到互联网,并且已经安装好了Java运行环境(JRE 或 JDK)。 一份SpringBoot应用程序代码,在本地环境已经编译为可运行的jar包。 本教程中的示例代码可以在我…

    Java 2023年5月19日
    00
  • java身份证验证代码实现

    下面是 “java身份证验证代码实现”的完整攻略。 1. 身份证号码规则 身份证号码规则如下: 身份证号码为18位数字和字母(除最后一位是字母外) 前17位为地区码和出生日期码,最后一位为校验码 校验码计算方法: 取出前17位数字(地区码和出生日期码),按权重分别乘以7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2 对乘积求和 将和数除…

    Java 2023年5月19日
    00
  • Spring Boot 应用的热部署配置方法

    Spring Boot应用的热部署配置方法 在开发Spring Boot应用程序时,我们需要频繁地修改代码并重新编译,这会浪费很多时间。为了提高开发效率,我们可以使用热部署来避免频繁的重启应用程序。本文将详细讲解如何在Spring Boot应用程序中配置热部署。 步骤一:添加依赖 我们需要在pom.xml文件中添加Spring Boot DevTools的依…

    Java 2023年5月15日
    00
  • IntelliJ idea 如何生成动态的JSON字符串(步骤详解)

    下面是详细的攻略,包括两个示例说明。 IntelliJ idea 如何生成动态的JSON字符串(步骤详解) 一、使用Gson库生成JSON字符串 在IntelliJ Idea中创建一个Java项目,然后在项目中导入Gson库的jar包。 创建一个Java类,在类中定义一个类成员,用于存储需要生成的JSON数据。 “`java import com.goog…

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