这个是在整合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同路径
<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
使用到了maven,进行项目依赖的管理。由于采用maven的多模块整合形式搭建项目,先介绍下essys_parent的pom.xml吧
以下是essys_parent的pom里的配置内容
<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.0modelVersion>
<groupId>cn.paygungroupId>
<artifactId>essys_parentartifactId>
<version>1.0-SNAPSHOTversion>
<modules>
<module>essys_commonmodule>
<module>essys_basemodule>
modules>
<packaging>pompackaging>
<name>essys_parentname>
<description>项目描述内容:description>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.1.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-lang3artifactId>
<version>3.4version>
dependency>
<dependency>
<groupId>org.jsoupgroupId>
<artifactId>jsoupartifactId>
<version>1.10.1version>
dependency>
dependencies>
<repositories>
<repository>
<id>spring-snapshotsid>
<name>Spring Snapshotsname>
<url>https://repo.spring.io/snapshoturl>
<snapshots>
<enabled>trueenabled>
snapshots>
repository>
<repository>
<id>spring-milestonesid>
<name>Spring Milestonesname>
<url>https://repo.spring.io/milestoneurl>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshotsid>
<name>Spring Snapshotsname>
<url>https://repo.spring.io/snapshoturl>
<snapshots>
<enabled>trueenabled>
snapshots>
pluginRepository>
<pluginRepository>
<id>spring-milestonesid>
<name>Spring Milestonesname>
<url>https://repo.spring.io/milestoneurl>
<snapshots>
<enabled>falseenabled>
snapshots>
pluginRepository>
pluginRepositories>
project>
以下是essys_base的pom里的配置内容:
<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.0modelVersion>
<artifactId>essys_baseartifactId>
<name>essys_basename>
<parent>
<artifactId>essys_parentartifactId>
<groupId>cn.paygungroupId>
<version>1.0-SNAPSHOTversion>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>2.5version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.0.29version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<executable>trueexecutable>
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.(MapperMethod.java:225) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.binding.MapperMethod.(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没有配置导致的