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

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

猜你喜欢

转载自blog.csdn.net/qq_35689573/article/details/80687744