springboot2.x已经发布一段时间,博主在这里使用springboot2.1.7整合mybatis3.5.2,使用的数据库为mysql8.0.13

1. 导入依赖

<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!--mybatis-spring-boot-starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>

2. 在application.properties配置数据源(此文件会被springboot自动扫描)

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=*********
#mysql8以上版本使用这个
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mybatis读取根目录下mapper文件夹下的所有以.xml结尾的文件
mybatis.mapper-locations=classpath:/mapper/*.xml

3. 编写controller,service,dao,mapper.xml

AdminController:

package com.gl.pin.web.controller;

import com.gl.pin.service.api.system.entity.AdminEntity;
import com.gl.pin.service.api.system.res.DubboRes;
import com.gl.pin.service.api.system.service.AdminServiceI;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import java.util.ArrayList;
import java.util.List; /**
* @Auther: zjk
* @Date: 2019/9/3
* @Description:
*/ @ResponseBody
@Controller
@RequestMapping(value = "/admin")
public class AdminController { @Autowired
AdminServiceI adminServiceI; @PostMapping(value = "/login")
public AdminEntity login(@RequestParam(value = "userName") String userName , @RequestParam (value = "password") String password){
return adminServiceI.login(userName,password);
} }

AdminService:(AdminServiceI 自行脑补)

package com.gl.pin.service.system.service;

import com.gl.pin.service.api.system.entity.AdminEntity;
import com.gl.pin.service.api.system.res.DubboRes;
import com.gl.pin.service.api.system.service.AdminServiceI;
import com.gl.pin.service.system.dao.AdminDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; /**
* @Auther: zjk
* @Date: 2019/9/4
* @Description:
*/
@Service
public class AdminService implements AdminServiceI { @Autowired
AdminDao adminDao; @Override
public AdminEntity login(String userName , String password) {
return adminDao.login(userName,password);
}
}

AdminDao:

package com.gl.pin.service.system.dao;

import com.gl.pin.service.api.system.entity.AdminEntity;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository; /**
* @Auther: zjk
* @Date: 2019/9/4
* @Description:
*/
@Repository
@Mapper
public interface AdminDao { /**
* 管理员登录
* @param userName
* @param password
* @return AdminEntity
*/
AdminEntity login(String userName,String password);
}

resoures/mapper/AdminDao.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.gl.pin.service.system.dao.AdminDao">
<!--AdminEntity与数据库中的列的映射-->
<resultMap id="adminDao" type="com.gl.pin.service.api.system.entity.AdminEntity">
<id property="id" column="a_id"/>
<result property="userName" column="a_userName"/>
<result property="password" column="a_password"/>
</resultMap> <!--admin login -->
<select id="login1" parameterType="java.lang.String" resultMap="adminDao">
SELECT a_id,a_userName,a_password FROM sys_admin WHERE a_userName=#{userName} AND a_password=#{password}
</select>
</mapper>

4. 如何将dao装配在spring容器中?

方法一:在dao接口类上加上注解@Mapper
@Repository
@Mapper
public interface AdminDao { /**
* 管理员登录
* @param userName
* @param password
* @return AdminEntity
*/
AdminEntity login(String userName,String password); }
方法二:在springboot启动类上加注解@MapperScan
@SpringBootApplication
@MapperScan("com.gl.pin.service.system.dao")
public class PinServiceSystemApplication { public static void main(String[] args) {
SpringApplication.run(PinServiceSystemApplication.class, args);
} }

5. 报错总结

1.springboot启动失败---找不到接口类

错误详情:

Description:

Field adminDao in com.gl.pin.service.system.service.AdminService required a bean of type 'com.gl.pin.service.system.dao.AdminDao' that could not be found.

The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'com.gl.pin.service.system.dao.AdminDao' in your configuration.

解决方案:没有使用@Mapper或@MapperScan,或者错误使用(@MapperScan扫描包的路径不对等等)

2. springboot启动成功,发送请求报错---dao和mapper.xml绑定失败,找不到对应方法

错误详情:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.gl.pin.service.system.dao.AdminDao.login

解决方案:

2.1 dao接口所在包与mapper.xml映射文件中的namespace不一致

<mapper namespace="com.gl.pin.service.system.dao.AdminDao">

2.2 dao中有的方法,但mapper.xml中没有
2.3 dao中的方法名和mapper.xml中id的不一样

<select id="login" parameterType="java.lang.String" resultMap="adminDao">

 2.4 mapper.xml文件压根没被解析,需要在application.properties中配置

#最好使用"/",用"."可能在多级文件情况下有问题
mybatis.mapper-locations=classpath:/mapper/*.xml

springboot整合mybatis肯定会有这样那样的问题,这些错误总结就是博主踩过的大坑,特别贴出来供大家参考。

springboot2.1.7整合mybati3.5.2与mysql8.0.13的更多相关文章

  1. SpringBoot2.1.6 整合CXF 实现Webservice

    SpringBoot2.1.6 整合CXF 实现Webservice 前言 最近LZ产品需要对接公司内部通讯工具,采用的是Webservice接口.产品框架用的SpringBoot2.1.6,于是采用 ...

  2. SpringBoot2.2.5整合ElasticSearch7.9.2

    1:前言 为什么是SpringBoot2.2.5,不是其他的SpringBoot版本,原因有两个: 1:SpringBoot2.2.0以上才能支持ElasticSearch7.x版本. 2:Sprin ...

  3. SpringBoot整合MyBatis与MySql8.0

    一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...

  4. 在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

    在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github ...

  5. springboot2.x版本整合redis(单机/集群)(使用lettuce)

    在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce. 此处springboot2.x,所以使用的是Lettuce.关于jedis跟 ...

  6. SpringBoot2.x版本整合SpringSecurity、Oauth2进行password认证

    很多人在进行项目开发时都会用到Oauth2.0结合SpringSecurity或者Shiro进行权限拦截以及用户验证,网上也有很多的案例,前几天项目里边需要用到,顺便整合了进来,特此写篇博客,记录下过 ...

  7. springboot2+shiro+jwt整合

    参考:https://www.jianshu.com/p/ef0a82d471d2 https://www.jianshu.com/p/3c51832f1051 https://blog.csdn.n ...

  8. springboot2.1.7整合swagger2.9.2

    什么是swagger? swagger是用于定义API文档的一个框架. 为什么要使用swagger? 当下项目开发时前后端是分离的,那么接口就成了前后端唯一的纽带.前端工程师如何知道哪个接口是干嘛的? ...

  9. springboot2.1.7整合Druid

    一.maven的依赖:文中就贴重点的, 其他依赖就不贴了 <dependency> <groupId>com.alibaba</groupId> <artif ...

随机推荐

  1. Numpy | 13 位运算

    NumPy "bitwise_" 开头的函数是位运算函数.本章都是按二进制来操作的. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操 ...

  2. Reactive Extensions (Rx) 入门(4) —— Rx的事件编程

    译文:https://blog.csdn.net/fangxing80/article/details/7685393 原文:http://www.atmarkit.co.jp/fdotnet/int ...

  3. ssl 原理简介

    要想弄明白SSL认证原理,首先要对CA有有所了解,它在SSL认证过程中有非常重要的作用.说白了,CA就是一个组织,专门为网络服务器颁发证书的,国际知名的CA机构有VeriSign.Symantec,国 ...

  4. 拼图验证码 js,vue

    可查看github网站

  5. 2019 第二届 科成安洵杯 官方WriteUp -17网安

    长文预警:对应源码请加企鹅群获取:861677907 0x01 WEB 1.1 勇闯贪吃蛇大冒险 一进去就看出来是一道web页面JS的小游戏,提示说输入CDUESTC CTF即可闯关成功,但是存在着d ...

  6. win10重装win7 无法引导

    品牌机win10回滚win7 无法引导 BIOS设置 按键盘上的右方向键(→)选择到"Exit" 按键盘上的下方向键(↓)选择到 "OS Optimized Defaul ...

  7. c语言用指针定义一个类型进行输入输出

    1 整型数组 // #include "stdafx.h" #include "stdlib.h" int _tmain(int argc, _TCHAR* a ...

  8. Java8之list<entity>获取实体的某一字段

    示例 List<String> titles = titleList.stream().map(e -> e.get(ConstantUtil.TITLE)).collect(Col ...

  9. ReentrantLock源码学习总结 (二)

    [^]: 以下源码分析基于JDK1.8 ReentrantLock 示例 private ReentrantLock lock = new ReentrantLock(true); public vo ...

  10. Oracle 行转列 动态出转换的列

    本文链接:https://blog.csdn.net/Huay_Li/article/details/82924443 10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后, ...