这个是在整合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没有配置导致的