Springboot+MybatisPlus,产生错误:This application has no explicit mapping for /error

在学习用postgresql数据库结合 Springboot+MybatisPlus时,创建了如下数据库表:

create table "user"
(
    id    bigint not null
        primary key,
    name  varchar(30),
    age   integer,
    email varchar(50)
);

alter table "user"
    owner to postgres;

DAO类:

package com.powernode.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class user {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

mapper接口:

package com.powernode.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.powernode.domain.user;
import org.apache.ibatis.annotations.Mapper;


@Mapper
public interface userMapper extends BaseMapper<user> {

}

 servicer接口:

package com.powernode.service;

import com.powernode.domain.user;

import java.util.List;


public interface userService {
    List<user> selectList();
}

service impl接口:

ackage com.powernode.service.impl;

import com.powernode.domain.user;
import com.powernode.mapper.userMapper;
import com.powernode.service.userService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class userServiceImpl implements userService {
    @Autowired
    private userMapper usermapper;
    @Override
    public List<user> selectList() {
        return usermapper.selectList(null);
    }
}

controller类:

package com.powernode.controller;

import com.powernode.domain.user;
import com.powernode.service.userService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class userController {
    @Autowired
    private userService userservice;

    @RequestMapping("/selectList")
    public List<user> selectList() {
        return userservice.selectList();
    }
}

项目配置yml文件:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mptest
    username: postgres
    password: postgres
    driver-class-name: org.postgresql.Driver

项目的文件结构: 

编译运行后,产生如下错误信息:

DEBUG信息提示:字段ID不存在。

首先,检查项目文件结构,application.yml在controller、domain、mapper、service包之外,且与四个包同级,符合Spring boot约定,问题依然存在。

其次,检查postgresql服务器,已自动运行。在IDEA中执行数据查询命令

,能够查询出完整结果。如下图:

 突然发现,IDEA生成的查询语句是这样的:

select * from "user";

数据库表名上被自动加上了双引号。如果去掉了双引号,IDEA查询结果如下:

 

数据库表名爆红,IDEA提示”无法解析表 user“,不能得出正确的查询结果。

查询语句修改如下:

select * from public.user

 IDEA继续报错,提示“关系不存在”:

 突然想到,postgersql的表,都是放在scheam(模式)下的,但网上的大多数例子用的mysql数据库,没有“模式”的概念。

在DAO类上添加Table注解,参数上标识表名和模式名:

@TableName(value = "user",schema = "public")

 修改后DAO类如下:

package com.powernode.domain;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "user",schema = "public")
public class user {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

再次运行整个项目程序,并在浏览器中查询,结果正确:

 至此,问题得以解决。

如果项目里面的表很多,每张表都用在DAO类里面写@TableName 注解的方式,就比较麻烦了。可以在application.yml文件统一配置表的前缀来达到上述目的。配置路径为:mybatis-plus.global-config.db-config.table-prefix: public.

注意:“public.”后面的小数点不能省略。

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mptest
    username: postgres
    password: postgres
    driver-class-name: org.postgresql.Driver
  main:
    banner-mode: OFF

mybatis-plus:
  global-config:
    banner: false
    db-config:
      table-prefix: public.
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot中的static-locations属性用于指定静态资源的位置。当访问一个URL时,Spring Boot会根据static-locations属性配置的路径去查找对应的静态资源文件。 当访问报错"This application has no explicit mapping for /error, so you are seeing this"时,可能是因为没有配置正确的static-locations路径或者没有找到对应的静态资源文件。 要解决这个问题,你可以按照以下步骤进行操作: 1. 确保你的静态资源文件放置在正确的位置。默认情况下,Spring Boot会在classpath下的/static目录中查找静态资源文件。你可以将静态资源文件放置在该目录下,或者通过配置static-locations属性来指定其他路径。 2. 在application.properties或application.yml文件中添加static-locations属性的配置。例如,如果你将静态资源文件放置在classpath下的/static/myfiles目录中,可以在配置文件中添加如下配置: application.properties: ``` spring.resources.static-locations=classpath:/static/,classpath:/static/myfiles/ ``` application.yml: ``` spring: resources: static-locations: classpath:/static/,classpath:/static/myfiles/ ``` 这样配置后,Spring Boot会在/static和/static/myfiles两个目录下查找静态资源文件。 3. 重新启动应用程序,并尝试访问静态资源文件的URL。如果仍然出现错误,请检查日志文件以获取更详细的错误信息,并确保静态资源文件的路径和名称正确。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qianmojushi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值