项目用的是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的源码了。