这两天在学SpringBoot+MyBatis的开发,配置开发环境和DEMO的过程中踩了很多坑,在这里记录一下。

我的开发环境是idea + JDK 1.8.0.211。

首先展示一下demo的项目整体结构

如图,涉及到的主要部分先后分别是pom.xml, application.yml, DoLearnApplication.java, User.java, UserMapper.java, UserMapperTest,其余部分由IDE自动完成。

依赖

核心依赖分为三部分

  • Spring-Boot

    • <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
  • MyBatis-Plus
    • <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus</artifactId>
      <version>3.1.2</version>
      </dependency>
  • MyBatis + Spring-Boot
    • <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.0</version>
      </dependency>

Spring-Boot的依赖是Spring-Boot的核心,MyBatis-Plus的依赖是整合MyBatis内部的组件,而MyBatis+Spring-Boot的依赖则是将MyBatis与SpringBoot相关联。因此三部分缺一不可。

我在配置的时候由于对MyBatis-Plus的理解错误,导致缺少MyBatis与Spring-Boot关联部分的依赖而导致卡了很久的进度。

测试所需的依赖

  • Junit

    • <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
      </dependency>
  • Spring-Boot Test
    •   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      </dependency>

这里需要注意一下,关于Junit的依赖牵扯到项目测试部分的一个坑,是关于包内引用的问题。

引用与注解

首先要处理application.yml配置文件,在文件尾添加配置信息如下。但是到单元测试为止,这部分似乎并没有生效,因此可暂时不添加。

# MyBatis Config
mybatis:
type-aliases-package: com.zora.doLearn.dao.entity

其中,com.zora.doLearn.dao.entity是我的实体类的包路径,需要取用的话应当修改为实际项目的包路径。

项目代码部分

DoLearnApplication.java

在类前添加

@MapperScan("com.zora.doLearn.dao.mapper")

对应的引用是

import org.mybatis.spring.annotation.MapperScan;

User.java

Demo的实体类,可以用lombok注解来取代手写Getter和Setter以节省代码量,使用方法是在类前添加

@Data

对应的引用是

import lombok.Data;

UserMapper.java

继承MyBatisPlus的接口类。写法是

public interface UserMapper extends BaseMapper<User> {
/* Your Override Code */
}

其中命名时,接口类名字 ***Mapper 中应当用对应实体类的名字取代米字符,而后面BaseMapper中也应当用对应的实体类来取代T。

这里需要的引用包括实体类和BaseMapper两个。

import com.zora.doLearn.dao.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

测试部分

主体配置完毕后可以先用测试类跑一下看看能不能通过。选中UserMapper类名,按快捷键Alt+Insert,选中'Test...'然后OK,会自动在test文件夹对应的目录中生成对应的测试类,需要对自动生成的类做如下修改。

  1. 将类设为public

  2. 类前添加 @RunWith(SpringRunner.class)

    对应的引用是import org.junit.runner.RunWith;

    import org.springframework.test.context.junit4.SpringRunner;

  3. 类前再添加@SpringBootTest

    对应的引用是import org.springframework.boot.test.context.SpringBootTest;

  4. 测试UserMapper是否配置成功,在类中写

    private UserMapper userMapper;

    注意将*Mapper改为对应的名字。并在声明前添加注解@Autowired

    对应的引用是import org.springframework.beans.factory.annotation.Autowired;

  5. 最后写一个测试方法,这里因为暂时还未填充数据库链接,因此只是简单地测试Mapper是否成功。

    public void test(){
    System.out.println("Test Success.");
    }

    并在方法前添加注解@Test,这里有坑,请注意,在写@Test后,IDE会提示补全引用,对应的有两个引用,分别为import org.junit.jupiter.api.Testimport org.junit.Test,这里应该选择org.junit.Test,否则会导致编译运行时报错。

后续会增加关于数据库连接与测试部分的内容...

Spring-Boot + MyBatis-Plus 踩坑记录的更多相关文章

  1. spring boot & mybatis集合的坑

    因为是使用的mybatis逆向工程自动生成的实体类和dao层,然后在读取某一个表的content字段时出现问题. 问题描述:在mysql数据库里可以直接查询到这个字段的内容,但是使用java相关的方法 ...

  2. spring boot +dubbo 踩坑记录

    今天初次搭建spring boot +duboo的demo.记录一下踩坑记录. 首先搭建3个小demo,一个maven项目,两个spring boot (服务提供者和服务消费者)项目. 两 sprin ...

  3. spring boot + mybatis + layui + shiro后台权限管理系统

    后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...

  4. SpringBoot + Shiro + shiro.ini 的踩坑记录

    0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...

  5. SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录

    Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...

  6. Spring Boot + Mybatis 配置多数据源

    Spring Boot + Mybatis 配置多数据源 Mybatis拦截器,字段名大写转小写 package com.sgcc.tysj.s.common.mybatis; import java ...

  7. # spring boot + mybatis 读取数据库

    spring boot + mybatis 读取数据库 创建数据库 use testdb; drop table if exists t_city; create table t_city( id i ...

  8. spring boot + mybatis + druid

    因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算 ...

  9. 快速搭建一个Spring Boot + MyBatis的开发框架

    前言:Spring Boot的自动化配置确实非常强大,为了方便大家把项目迁移到Spring Boot,特意总结了一下如何快速搭建一个Spring Boot + MyBatis的简易文档,下面是简单的步 ...

  10. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

随机推荐

  1. Java--分布式系统高并发解决方案

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...

  2. A熟知SP.NET---WebForms UnobtrusiveValidationMode 必须“jquery”ScriptResourceMapping。

    我相信,有过ASP.NET人们学习经验RequiredFieldValidator控制(验证非空控制)一定不会陌生,禁止控制输入定义的内容的作用(该属性InitialValue的值.属性默认值为空字符 ...

  3. Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1)

    原文:Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1) 首先感谢:http://blog.csdn.net/shuilan0066/article/detail ...

  4. FastDFS是纯C语言实现,只支持Linux,适合以中小文件为载体的在线服务,还可以冗余备份和负载均衡

    一.理论基础 FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器. 分布式文件系统FastDFS FastDFS是纯C语言实现,只支持Linux.Fr ...

  5. c#-WPF string,color,brush之间的转换

    原文:c#-WPF string,color,brush之间的转换 String转换成Color string-"ffffff" Color color = (Color)Colo ...

  6. C++该typeid和dynamic_cast

    1.typeid在没有虚拟函数的(不相关的动态绑定),typeid它只返回操作对象的实际类型 2.typeid涉及到动态联编问题时(使用基类指针p或者引用p操作派生类对象),typeid(p)返回基类 ...

  7. WPF实用指南二:移除窗体的图标

    原文:WPF实用指南二:移除窗体的图标 WPF没有提供任何功能来移除窗体上的icon图标.一般的做法是设置一个空白的图标,如下图1: 这种做法在窗体边框与标题之间仍然会保留一片空白. 比较好的做法是使 ...

  8. Easyui Tab刷新

    Easyui Tab刷新: function refreshTab(title){ var tab = $('#id').tab('getTab',title); $('#id').tab('upda ...

  9. Xamarin 设置可接受的版本

    一共分三个版本,编译版本.最小版本.目标版本(最适应) 一般编译使用最新的版本,目标版本选择最主流的 参考资料 https://docs.microsoft.com/en-us/xamarin/and ...

  10. 基于 CSP 的设计思想和 OOP 设计思想的异同

    LinkerLin Go语言推崇的CSP编程模型和设计思想,并没有引起很多Go开发者包括Go标准库作者的重视.标准库的很多设计保留了很浓的OOP的味道.本篇Blog想比较下从设计的角度看,CSP和OO ...