下面是Springboot MyBatis常见配置问题解决的完整攻略。
问题一:MyBatis的Mapper不能正常映射数据库表
原因
由于 Mapper 文件和数据库表的对应关系没有处理好,MyBatis 执行时会找不到对应的表或列,导致不能正常映射。
解决方案
-
确认数据库配置是否正确,包括数据库名称、端口、用户名、密码等。
-
确认 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技术站