org.apache.ibatis.binding.BindingException问题解决

这个是在整合MyBatis的时候出现的,当前用到的是基于xml去处理数据的,也有人用注解去操作数据,不过不太灵活,简单的数据可以搞搞,复杂还是写sql好些

项目概述

1、先介绍下大概的情况,首先工程目录说明:

essys_parent为父工程,
essys_base和essys_common为子工程,由于采用了maven多模块开发,并且用到了springboot
在这里插入图片描述

2、以essys_base为demo来编写启动测试页面

其目录结构如下图所示:
在这里插入图片描述
关于各层代码内容


1.bean下的实体
类名:Staff.java,所在包bean

package cn.paygun.essys.bean;
import java.util.Date;
/**
 * 对应数据库中的员工数据表
 */
public class Staff {
  private Long id;//主键id
  private String userNo;//用户编号
  // ... 省略其他的属性
  public Staff() {} // 提供无参构造方法,为了后面可以加入有参构造以提供基础对象初始化调用
  
  // 取得id
  public Long getId() {
    return id;
  }
  // 设置id
  public void setId(Long id) {
    this.id = id;
  }
  // 取得userNo
  public String getUserNo() {
    return userNo;
  }
  // 设置userNo
  public void setUserNo(String userNo) {
    this.userNo = userNo;
  }
  // 省略其他的属性getter和settger方法

2.mapper的操作数据库
类名:StaffDao.java,所在包mapper

package cn.paygun.essys.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import cn.paygun.essys.bean.Staff;

@Mapper
public interface StaffDao {
  // 取所有数据
  public List<Staff> getAll();
}

StaffDao类的映射文件,名称为:StaffDao.xml,所在包mapper,与StaffDao同路径

<?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="cn.paygun.essys.mapper.StaffDao">
  <select id="getAll" resultType="cn.paygun.essys.bean.Staff">
		SELECT * FROM staff
	</select>
</mapper>

3.service业务操作
类名:StaffService.java,所在包service

package cn.paygun.essys.service;

import cn.paygun.essys.bean.Staff;
import cn.paygun.essys.mapper.StaffDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class StaffService {
  @Autowired
  StaffDao staffDao;
  public List<Staff> getList(){
    return staffDao.getAll();
  }
}

4.controller跳转
类名:MyController.java,所在包controller
本类为浏览器路径路由类,提供了一个从数据库里取数据并返回数据至页面显示的方法,和一个直接返回字符串数据的方法

package cn.paygun.essys.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.paygun.essys.bean.Staff;
import cn.paygun.essys.service.StaffService;

@RestController
public class MyController {
  @Autowired
  private StaffService staffService;
  @RequestMapping("/show1")
  public List<Staff> getAll1() {
    List<Staff> list = staffService.getList();
    return list;
  }
  @RequestMapping("/aa")
  public String getA() {
    return "aa";
  }
}

5.配置文件
主配置文件 application.properties

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql:///test?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
server.port=8087

日志打印配置:

log4j.rootLogger=DEBUG,stdout
log4j.logger.org.mybatis=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n 

pom.xml配置

使用到了maven,进行项目依赖的管理。由于采用maven的多模块整合形式搭建项目,先介绍下essys_parent的pom.xml吧

以下是essys_parent的pom里的配置内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.paygun</groupId>
  <artifactId>essys_parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <modules>
    <module>essys_common</module>
    <module>essys_base</module>
  </modules>
  <packaging>pom</packaging>
  <name>essys_parent</name>
  <description>项目描述内容:</description>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <!--web-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!--通用工具类Apache Commons-lang3-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.4</version>
    </dependency>
    <!--jsoup-->
    <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.10.1</version>
    </dependency>
  </dependencies>
  
  <repositories>
    <repository>
      <id>spring-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>spring-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </pluginRepository>
    <pluginRepository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>
</project>

以下是essys_base的pom里的配置内容:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>essys_base</artifactId>
  <name>essys_base</name>

  <parent>
    <artifactId>essys_parent</artifactId>
    <groupId>cn.paygun</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.29</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <executable>true</executable>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

开始启动项目

1、打开浏览器,输入localhost:8087,先请求/aa路径
有信息,出现了aa,请求状态200,没毛病。。。
在这里插入图片描述
2.那我们再来请求一下/show路径吧,一请求吓一跳,返回了500,如下图
在这里插入图片描述
我们转到idea的console界面,发现了下面的输出内容
文字报错内容

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.paygun.essys.mapper.StaffDao.getAll
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225) ~[mybatis-3.4.5.jar:3.4.5]
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) ~[mybatis-3.4.5.jar:3.4.5]
	at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.5.jar:3.4.5]
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.5.jar:3.4.5]
	at com.sun.proxy.$Proxy62.getAll(Unknown Source) ~[na:na]
	at cn.paygun.essys.service.StaffService.getList(StaffService.java:18) ~[classes/:na]

图片截图(错误的内容是一样的):
在这里插入图片描述
错误为BindingException,于是找了一下相关的百度搜索。
这个还可以,总结了日常容易出现的(跟BindingExceptiong有关的):https://www.cnblogs.com/lfm601508022/p/InvalidBoundStatement.html

但是没有用,这些个问题都不存有。于是想到了编译输出后不存在xml文件这个问题不太引人注目的问题,跑去看了一下编译输出文件目录内容,发现xml居然没有????
在这里插入图片描述
于是向essys_base的pom.xml里添加了resources节点配置,目的将src>main>java中含有*.xml的都要输出到编译目录下 在这里插入图片描述

保存一哈,进行重启,再次访问localhost:8087/show,可以返回json数据了
在这里插入图片描述
再检查下编译后输出的内容,多出来了xml文件,看来还是那个resources没有配置导致的
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值