Spring+mybaits配置遇到的问题

2021年,八月,在学习springboot+mybatis的时候遇到了一些问题:

1、spring启动错误

刚开始,在配置springboot+mybaits的时候,根据网络上的博客,配置application.yml,配置UserMapper等文件

application.yml

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/t_blog?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456
mybatis:type-aliases-package: com.mybatislearn.mockingjay.entitymapper-locations: classpath:mapper/*.xml
server:port: 8080

UserMapper.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.mybatislearn.mockingjay.mapper.UserMapper"><resultMap id="UserMap" type="com.mybatislearn.mockingjay.entity.User" ><id column="id" property="id" /><result column="avatar" property="avatar" /><result column="createTime" property="createTime" /><result column="email" property="email"  /><result column="nickname" property="nickname"  /><result column="password" property="password"  /><result column="type" property="type"  /><result column="updateTime" property="updateTime"  /><result column="username" property="username"  /></resultMap><!--  根据用户名查询用户--><select id="loadUserByUsername" resultMap="UserMap">select * from t_user where username=#{username}</select>
</mapper>

配置一个mapper接口

UserMapper.java

package com.mybatislearn.mockingjay.mapper;
import com.mybatislearn.mockingjay.entity.User;public interface UserMapper {User loadUserByUsername(String username);}

同时项目内也是MVC结构的:

service

UserService.java

package com.mybatislearn.mockingjay.service;
import com.mybatislearn.mockingjay.entity.User;public interface UserService {User queryUserByname(String name);
}

UserServiceImpl.java

package com.mybatislearn.mockingjay.service;import com.mybatislearn.mockingjay.entity.User;
import com.mybatislearn.mockingjay.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements  UserService{@Autowiredprivate UserMapper userMapper;@Overridepublic User queryUserByname(String name) {User user = userMapper.loadUserByUsername(name);return user;}
}

Controller

package com.mybatislearn.mockingjay.controller;import com.mybatislearn.mockingjay.entity.User;
import com.mybatislearn.mockingjay.mapper.UserMapper;
import com.mybatislearn.mockingjay.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/getuser")public User GetUser(String name) {System.out.println(name);User user = userService.queryUserByname(name);return user;}
}

最后是一个User实体

User.java

package com.mybatislearn.mockingjay.entity;
import lombok.Data;
import lombok.ToString;
import java.time.LocalDateTime;@Data
@ToString
public class User {private Long id;private String avatar;private LocalDateTime createTime;private String email;private String nickname;private String password;private Integer type;private LocalDateTime updateTime;private String username;}

最后是pom文件,这里只取maven依赖

<dependencies><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.8</version></dependency>
</dependencies>

在配置完成后出现了springboot启动失败的问题:

打印的日志

APPLICATION FAILED TO STARTDescription:An attempt was made to call a method that does not exist. The attempt was made from the following location:org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.createHandlerMethod(AbstractHandlerMethodMapping.java:341)The following method did not exist:'void org.springframework.web.method.HandlerMethod.<init>(java.lang.String, org.springframework.beans.factory.BeanFactory, org.springframework.context.MessageSource, java.lang.reflect.Method)'The method's class, org.springframework.web.method.HandlerMethod, is available from the following locations:```
jar:file:/C:/Users/xzh11/.m2/repository/org/springframework/spring-web/5.3.8/spring-web-5.3.8.jar!/org/springframework/web/method/HandlerMethod.class
```The class hierarchy was loaded from the following locations:```
org.springframework.web.method.HandlerMethod: file:/C:/Users/xzh11/.m2/repository/org/springframework/spring-web/5.3.8/spring-web-5.3.8.jar
```Action:Correct the classpath of your application so that it contains a single, compatible version of org.springframework.web.method.HandlerMethodProcess finished with exit code 0

在查阅资料后,我觉得是我使用的spring版本的问题,项目内我使用的是2.5.4snapshot

<version>2.5.4-SNAPSHOT</version>

进入官网后,看到springboot最新的稳定版本为2.5.3

springboot官网

替换springboot版本为2.5.3

<version>2.5.3</version>

成功启动springboot!

2、mybais报错 Invalid bound statement

在启动springboot后,对Controller进行测试,结果出现mybatis报错Invalid bound statement

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.mybatislearn.mockingjay.mapper.UserMapper.loadUserByUsernameat org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ~[mybatis-3.5.6.jar:3.5.6]at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53) ~[mybatis-3.5.6.jar:3.5.6]at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:115) ~[mybatis-3.5.6.jar:3.5.6]at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na]at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:102) ~[mybatis-3.5.6.jar:3.5.6]at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85) ~[mybatis-3.5.6.jar:3.5.6]at com.sun.proxy.$Proxy57.loadUserByUsername(Unknown Source) ~[na:na]at com.mybatislearn.mockingjay.service.UserServiceImpl.queryUserByname(UserServiceImpl.java:15) ~[classes/:na]at com.mybatislearn.mockingjay.controller.UserController.GetUser(UserController.java:21) ~[classes/:na]......

在折腾了一上午之后,发现还是配置的错误:

在UserMapper文件中的namespace没有写对!!!!!

<?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.mybatislearn.mockingjay.mapper.UserMapper"><resultMap id="UserMap" type="com.mybatislearn.mockingjay.entity.User" ><id column="id" property="id" /><result column="avatar" property="avatar" /><result column="createTime" property="createTime" /><result column="email" property="email"  /><result column="nickname" property="nickname"  /><result column="password" property="password"  /><result column="type" property="type"  /><result column="updateTime" property="updateTime"  /><result column="username" property="username"  /></resultMap><!--  根据用户名查询用户--><select id="loadUserByUsername" resultMap="UserMap">select * from t_user where username=#{username}</select>
</mapper>

3、总结

这次的错误排查用了我将近一天的时间,对于新手来说,太折磨了

于是,写一个文档进行记录,防止下次再遇到同样的问题。

springboot启动失败的时候,若日志显示找不到什么文件,估计是配置的问题。

配置项目的时候最好再官网上查查稳定的版本。

在配置mybatis的时候,容易犯的错误:

1、要注意属性文件中,实体类地址和mapper地址是否正确

type-aliases-package: com.mybatislearn.mockingjay.entity
mapper-locations: classpath:mapper/*.xml

2、配置Mapper.xml的时候,注意标签下的namespace是否正确

<mapper namespace="com.mybatislearn.mockingjay.mapper.UserMapper">

注意标签中的 type地址是否正确

<resultMap id="UserMap" type="com.mybatislearn.mockingjay.entity.User" >

映射语句中的 id 是否正确对应映射接口的方法名

<select id="loadUserByUsername" resultMap="UserMap">select * from t_user where username=#{username}
</select>
package com.mybatislearn.mockingjay.mapper;
import com.mybatislearn.mockingjay.entity.User;public interface UserMapper {User loadUserByUsername(String username);}
``

记一次Springboot+mybaits配置经历相关推荐

  1. SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)

    昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载arcgis等较大的文件,所以在部署后,发现页面loading需要很长时间,而且刷新也要重新从服务器下载 ...

  2. 如果当时这20道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-8-27)

    前情提要 又一次的面试经历,下班去面试的,热情的HR,一家外企大公司,从未接触的规模与环境,满怀期待,面试的是三个中年男子,问了很多问题,真的很多,方方面面,感觉答的不是很尽善尽美,有些东西还是说不清 ...

  3. 如果当时这15道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-7-23)

    一.前情提要 今天请假面试,上午两家,下午三家(暂定两点钟A.三点半B.四点C),全军出击的赶脚,有一家公司感觉还可以,来这家面试还真是一波三折: ① 一个不认识的猎头推荐的C(今天上午11点给我打的 ...

  4. 这样讲 SpringBoot 自动配置原理,你应该能明白了吧

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:你在我家门口 juejin.im/post/5ce5effb ...

  5. 笑死,面试官又问我SpringBoot自动配置原理

    面试官:好久没见,甚是想念.今天来聊聊SpringBoot的自动配置吧? 候选者:嗯,SpringBoot的自动配置我觉得是SpringBoot很重要的"特性"了.众所周知,Spr ...

  6. 【springboot】配置

    配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoot自 ...

  7. SpringBoot自动配置的原理及实现

    SpringBoot的核心就是自动配置,自动配置是基于条件判断配置Bean 自动配置的源码在spring-boot-autoconfigure-2.2.13.RELEASE SpringBoot运行原 ...

  8. SpringBoot之配置嵌入式Servlet容器

    1.概述 文章目录 1.概述 2.如何修改SpringBoot的默认配置 3.定制和修改Servlet容器的相关配置 4.注册Servlet三大组件 5.替换为其他嵌入式Servlet容器 6.嵌入式 ...

  9. springboot中配置了拦截器后,拦截器无效的解决方案之一

    springboot中配置了拦截器后,拦截器无效的解决方案之一 参考文章: (1)springboot中配置了拦截器后,拦截器无效的解决方案之一 (2)https://www.cnblogs.com/ ...

最新文章

  1. C 上传文件到服务器(含接收端源码)
  2. windows下sqlite3的基本操作
  3. 海军工程大学学生电子课程-DIY Final预验收
  4. 学python爬虫需要什么基础-学习python爬虫需要具备的基本功
  5. 关于使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能...
  6. linux内核亲和性,Linux中CPU亲和性(go)
  7. c ++一行给多个变量赋值_C语言变量
  8. python 树状图可视化_Python可视化25|seaborn矩阵图
  9. 机器学习-算法背后的理论与优化(part1)--从线性回归到逻辑回归
  10. 武汉科技大学c语言复试题库,2016年武汉科技大学计算机科学与技术学院C语言程序设计复试笔试仿真模拟题...
  11. Springboot02配制jsp
  12. shop--8.商品类别--批量操作--添加(前端)
  13. Java学习笔记之设计模式(2)工厂模式
  14. 三星c9000刷android7.0,三星C9 Pro C9000官方原厂rom线刷包刷机包C9000ZCU1CRI1
  15. css 简单写出咸蛋超人
  16. Java的面向对象 -- 继承
  17. 多个Ajax请求成功后再执行后续方法
  18. 2017 开源中国新增开源项目排行榜 TOP 100
  19. oracle中 || 代表的含义
  20. 让人拍案叫绝的创意如何产生

热门文章

  1. HDOJ/HDU 1804 Deli Deli(英语单词复数形式~)
  2. c语言培训后工作机会,娄底C语言培训,娄底C++找工作难吗,娄底C++培训完找什么工作...
  3. 开源网管软件-明智的选择
  4. [zt]看清安全利器:五大杀毒引擎分析
  5. 开发在线教育直播平台的原因以及好处
  6. 短线高手快速看盘技巧
  7. 应该学习css的几个理由
  8. 10大Python库必须了解
  9. 小鼠植入前胚胎的可接近染色质图谱
  10. 03crawler02 爬取贴吧排名, 制作图片集