关于springBoot+Mybatis项目部署的一些问题

本文介绍了在部署SpringBoot+Mybatis项目时遇到的两个主要问题及解决办法。首先,由于编译环境与服务器环境不匹配导致Unsupported major.minor version 52.0错误,通过升级服务器上的JDK版本解决。其次,讨论了Mapped Statements collection错误,分析了SpringBoot访问sql的两种方式,并测试了不同xml文件位置对访问的影响,最终建议将xml文件放在resources下以确保稳定性和访问速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目用的是JDK1.8,本地运行一切正常,当想部署到服务器上的时候,会出现,项目无法启动的问题,报错信息如下:

1、Unsupported major.minor version 52.0

编译环境与运行环境不一致,本地是用JDK1.8编译运行的,服务器上最高只有JDK1.7,于是,在网上下载了JDK1.8,并安装在服务器上(关于如何在服务器上给项目安装JDK版本,我会在下篇文章更新)。一般major.minor version 52.0对应的是JDK1.8,major.minor version 51.0对应的是JDK1.7。

2、Mapped Statements collection does not contain value for.......

这个是在执行sql语句的时候报的错误,进过测试,现总结如下:

springBoot访问sql有两种方式:

方式1:Mapper接口

package com.frame.dao;(包名)

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface IHelloWorld(类名) {
	String getUserId();(方法名)
}

每个Mapper接口都要对应一个xml文件

<?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.frame.dao.IHelloWorld">(与Mapper接口的全映射路径对应)
    <select id="getUserId" resultType="java.lang.String" parameterType="java.lang.String">(sql的ID与Mapper接口的方法名对应)
        select 1 from dual
    </select>
</mapper>

当我们调用getUserId()方法时:

@Autowired
private IHelloWorld helloWorld;

@RequestMapping("/query2dbpage")
@ResponseBody
public Object query2dbpage() {
    return helloWorld.getUserId();
}

直接会通过接口调用xml文件中的sql执行,如果Mapper接口没有对应的xml文件的话,就会报Invalid bound statement (not found): com.frame.dao.HelloMapper.getUserId错误。

方式2:namespsce+SQL的ID(报错信息:Mapped Statements collection does not contain value for demo.test)

这种方式是直接省略Mapper接口,我们在调用处就直接调用

DaoHelper.queryObject("com.frame.dao.IHelloWorld.getUserId", 1);

如果找不到对应的sql时就会报Mapped Statements collection does not contain value for com.frame.dao.IHelloWorld.getUserId错误。

这两种访问sql的方式想必大家都已经很明白了吧,下面我们接着看一下是如何解决这个报错的。

我一共对四种情况进行了测试

1)、如果将xml文件放在resources文件夹下面,不配置mybatis.mapper-locations,两种方式都不能访问



2)、如果将xml配置文件放在src文件夹下,不配置mybatis.mapper-locations,两种方式都不能访问

那看来不配置mybatis.mapper-locations是不行的,也就是说必须要配置mybatis.mapper-locations这个参数

3)、将xml文件放在src下面的某个文件夹中

        存在Mapper接口:
Mapper和xml在同一个文件夹下,两种方式都支持。
Mapper和xml不在同一个文件夹下,有时候是可以成功访问,有时候是不可以的,不稳定。×
不存在Mapper接口:
方式2访问本地可以(我们刚开始就是用的这种方式,导致本地好用,部署的时候就无法访问了),服务器上就不行,不稳定,基本不稳定的话服务器就不支持了×

4)、将XML文件放在resources下,两种方式都支持,且访问速度很快

现在直接将xml文件放在resources下,使用方式2访问,可以省掉dao层

springBoot默认加载sql的标准方式应该就只有两种,就是以上打对号的两种方式,最好不要用其他不稳定的那几种方式,容易带来不必要的麻烦。如果还想深究一下的话我们就只能去看spring的源码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值