springboot2.1.7整合mybati3.5.2与mysql8.0.13
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的更多相关文章
- SpringBoot2.1.6 整合CXF 实现Webservice
		
SpringBoot2.1.6 整合CXF 实现Webservice 前言 最近LZ产品需要对接公司内部通讯工具,采用的是Webservice接口.产品框架用的SpringBoot2.1.6,于是采用 ...
 - SpringBoot2.2.5整合ElasticSearch7.9.2
		
1:前言 为什么是SpringBoot2.2.5,不是其他的SpringBoot版本,原因有两个: 1:SpringBoot2.2.0以上才能支持ElasticSearch7.x版本. 2:Sprin ...
 - SpringBoot整合MyBatis与MySql8.0
		
一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...
 - 在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 ...
 - springboot2.x版本整合redis(单机/集群)(使用lettuce)
		
在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce. 此处springboot2.x,所以使用的是Lettuce.关于jedis跟 ...
 - SpringBoot2.x版本整合SpringSecurity、Oauth2进行password认证
		
很多人在进行项目开发时都会用到Oauth2.0结合SpringSecurity或者Shiro进行权限拦截以及用户验证,网上也有很多的案例,前几天项目里边需要用到,顺便整合了进来,特此写篇博客,记录下过 ...
 - springboot2+shiro+jwt整合
		
参考:https://www.jianshu.com/p/ef0a82d471d2 https://www.jianshu.com/p/3c51832f1051 https://blog.csdn.n ...
 - springboot2.1.7整合swagger2.9.2
		
什么是swagger? swagger是用于定义API文档的一个框架. 为什么要使用swagger? 当下项目开发时前后端是分离的,那么接口就成了前后端唯一的纽带.前端工程师如何知道哪个接口是干嘛的? ...
 - springboot2.1.7整合Druid
		
一.maven的依赖:文中就贴重点的, 其他依赖就不贴了 <dependency> <groupId>com.alibaba</groupId> <artif ...
 
随机推荐
- ant-design-vue有v-decorator时defaultValue无效
			
<a-input v-decorator="[ 'userName', { rules: [ { required: true, message: '请输入您的账号!' } ], in ...
 - JS的ES5的扩展内容
			
JS的ES5 1.严格模式: (1)什么是严格模式: 在全局或函数的第一条语句定义为: 'use strict' 如果浏览器不支持, 只解析为一条简单的语句, 没有任何副作用 (2)严格模式作用: ...
 - paython基础-格式化输出
			
目录 %s %r %d 及其他%... formate f"{变量}" 详细查找:https://docs.python.org/3/library/string.html#for ...
 - Quartus RTL Simulation
			
今天在做某个module的RTL Simulation时,发现之前的do文件有问题,导致信号没有导入.将sim中的XXX_tb设置成了XXX所致.改正后无误. 可参考: https://www.cnb ...
 - 关于windows使用git警告LF will be replaced by CRLF
			
由于windows平台的换行符是CRLF,但是我们引用别人的类库可能是在unix平台开发的,那么代码中的换行符是LF,而git默认会做这个转换,所以在用git提交这些代码时会有警告:LF will b ...
 - nginx 常用全局变量
			
变量 说明 $args 请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2 $content_length HTTP请求信息里的" ...
 - xshell && xftp  下载
			
链接:https://pan.baidu.com/s/1aLdgOSshytIYhArkB7tghQ 提取码:fqjb
 - R 目录及文件操作
			
获取当前路径 getwd() 切换当前路径 setwd() 返回上一级目录 setwd(dirname(getwd())) 获取文件所在路径 dirname() 查看当前目录的子目录 lis ...
 - UDF——判断边界类型
 - oracle 使用length()函数需要注意的坑!
			
1.情景展示 筛选出指定字段字符长度既不等于18也不等于15的数据. 2.原因分析 第一步:按字符串度进行分组统计: 第二步:筛选数据. 你会发现,只将length=17统计了出来,长度不存在的数 ...