当前位置: 首页 > news >正文

SpringBoot:SpringBoot整合Junit 和 MyBatis(3)

SpringBoot整合Junit 和 MyBatis

  • 1. SpringBoot整合Junit
  • 2. SpringBoot整合MyBatis
    • 2.1 定义SpringBoot项目
    • 2.2 定义dao接口
    • 2.3 定义service层
    • 2.4 定义controller层
    • 2.5 配置yml/yaml文件
    • 2.6 postman测试

1. SpringBoot整合Junit

在这里插入图片描述
com.example.service下创建BookService接口

public interface BookService {void save();
}

com.example.service.impl 包写创建一个 BookServiceImpl 类,使其实现 BookService 接口,内容如下

@Service
public class BookServiceImpl implements BookService {@Overridepublic void save() {System.out.println("book service is running ...");}
}

编写Junit测试类

test/java 下创建 com.example 包,在该包下创建测试类,将 BookService 注入到该测试类中

@SpringBootTest
class Springboot07TestApplicationTests {@Autowiredprivate BookService bookService;@Testpublic void save() {bookService.save();}
}

==注意:==这里的引导类所在包必须是测试类所在包及其子包。

例如:

  • 引导类所在包(xxxApplication.java)是 com.example
  • 测试类所在包是 com.example

如果不满足这个要求的话,就需要在使用 @SpringBootTest 注解时,使用 classes 属性指定引导类的字节码对象。如 @SpringBootTest(classes = Springboot07TestApplication.class)

2. SpringBoot整合MyBatis

2.1 定义SpringBoot项目

  • 创建模块,选择Spring Initializr, 并配置模块相关基础信息
    在这里插入图片描述
  • 选择当前模块需要使用的技术集:MyBatisMySQL
    在这里插入图片描述

2.2 定义dao接口

com.example目录下面创建dao目录,并在该目录下创建BookDao接口。
注意

  1. 这里dao层接口上面需要加上@Mapper注解,把接口变为实体类。这样在自动注入的时候,SpringIOC容器才能进行管理,要不然容器找不到该接口对应的实体类。
  2. 如果第一步没有在dao层接口上面添加@Mapper注解,可以在引导类的上面添加@MapperScan("com.example.dao") ,将dao层接口全部转化为实体类,都交给Spring容器管理。
    在这里插入图片描述
// 作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
// 添加位置:接口类上面
@Mapper
public interface BookDao {@Select("select * from tb_book where id = ${id}")public Book getById(Integer id);
}

2.3 定义service层

com.example目录下面创建service目录,并在该目录下创建BookService接口, 然后在com.example.service目录下创建impl目录,然后在此目录下创建BookService接口的实现类BookServiceImpl.

public interface BookService {/*** 根据id查询书对象* @param id* @return*/Book getById(Integer id);
}
@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookDao bookDao;@Overridepublic Book getById(Integer id) {return bookDao.getById(id);}
}

2.4 定义controller层

com.example目录下面创建controller目录,并在该目录下创建BookController类, 注意,这里使用了统一返回结果,具体可以参考文章:https://editor.csdn.net/md/?articleId=128905204

@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate BookService bookService;@GetMapping("/{id}")public Ret getById(@PathVariable Integer id){Book book = bookService.getById(id);// 查找失败if(book == null){return new Ret(Code.SELECT_ERR, null, "查找失败...");}// 查找成功return new Ret(Code.SELECT_OK, book, null);}
}

2.5 配置yml/yaml文件

server:port: 8080---spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_dbusername: rootpassword: 1234---
# 使用Druid数据源
#spring:
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
#    username: root
#    password: 1234
#    type: com.alibaba.druid.pool.DruidDataSource---
#日志级别 trace < debug < info < warn < error < fatal
logging:level:root: info

注意:SpringBoot自带连接数据库资源,我们也可以自己进行配置,例如配置alibaba的Druid,需要再pom.xml中添加对应的依赖,如下所示:

        <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency>

application.yml配置Druid资源信息:

# 使用Druid数据源
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTCusername: rootpassword: 1234type: com.alibaba.druid.pool.DruidDataSource

2.6 postman测试

查询成功案例
在这里插入图片描述

查询失败案例

在这里插入图片描述

相关文章:

SpringBoot:SpringBoot整合Junit 和 MyBatis(3)

SpringBoot整合Junit 和 MyBatis1. SpringBoot整合Junit2. SpringBoot整合MyBatis2.1 定义SpringBoot项目2.2 定义dao接口2.3 定义service层2.4 定义controller层2.5 配置yml/yaml文件2.6 postman测试1. SpringBoot整合Junit 在com.example.service下创建BookService接口 publ…...

Web自动化测试框架Selenium

作者&#xff1a;霍格沃兹测试开发学社 链接&#xff1a;https://www.zhihu.com/question/59854292/answer/2827875817 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 什么是自动化测试 自动化测试就是&#xff0…...

大数据系统自检

第一章 大数据计算系统概述 1.1 大数据计算框架概述 Hadoop Hadoop的运行过程&#xff08;5个步骤&#xff1f;&#xff09; split > map > shuffle > reduce > output Hadoop的详细运行过程&#xff1f;&#xff08;4个大过程&#xff0c;6662&#xff09; 创建…...

MySQL数据库操作

查看数据库语法show databases——列出所有的数据库 show databases [ like wild ];——列出和字符串wild名字相同的数据库 这里可以配合SQl的 "%" 和 "_" 通配符使用来查找多个数据库在SQL语句中"%"代表任意字符出现任意次数,"_"代表…...

线程安全实例分析

一、变量的线程安全分析 成员变量和静态变量是否线程安全&#xff1f; ● 如果它们没有共享&#xff0c;则线程安全 ● 如果它们被共享了&#xff0c;根据它们的状态是否能够改变&#xff0c;又分两种情况 —— 如果只有读操作&#xff0c;则线程安全 —— 如果有读写操作&am…...

Tomcat源码分析-启动分析(二) Catalina初始化

Bootstrap Tomcat运行是通过Bootstrap的main方法&#xff0c;在开发工具中&#xff0c;我们只需要运行Bootstrap的main方法&#xff0c;便可以启动tomcat进行代码调试和分析。Bootstrap是tomcat的入口&#xff0c;它会完成初始化ClassLoader&#xff0c;实例化Catalina以及loa…...

基础复习第二十二天 泛型的使用

泛型JDK1.5设计了泛型的概念。泛型即为“类型参数”&#xff0c;这个类型参数在声明它的类、接口或方法中&#xff0c;代表未知的通用的类型。例如&#xff1a;java.lang.Comparable接口和java.util.Comparator接口&#xff0c;是用于对象比较大小的规范接口&#xff0c;这两个…...

【C++进阶】三、二叉搜索树

目录 一、二叉搜索树 1.1 概念 1.2 二叉搜索树操作 二、二叉搜索树实现 2.1 框架总览 2.2 实现接口总览 2.2.1 构造函数 2.2.2 拷贝构造 2.2.3 赋值重载 2.2.4 析构函数 2.2.5 二叉搜索树的遍历 2.2.6 插入函数 2.2.7 查找函数 2.2.8 删除函数 2.3 二叉搜索数完整…...

电脑系统崩溃怎么修复教程

系统崩溃了怎么办? 如今的软件是越来越复杂、越来越庞大。由系统本身造成的崩溃即使是最简单的操作&#xff0c;比如关闭系统或者是对BIOS进行升级都可能会对PC合操作系统造成一定的影响。下面一起来看看电脑系统崩溃修复方法步骤。 工具/原料&#xff1a; 系统版本&#xf…...

语义分割数据标注案例分析

语义分割&#xff08;Semantic Segmentation&#xff09;是计算机视觉领域中的一种重要任务&#xff0c;它的目的是将图像中的每个像素分配到对应的语义类别中。简单来说&#xff0c;就是将一张图像分割成多个区域&#xff0c;并为每个像素指定一个标签&#xff0c;标识出它属于…...

回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(多指标评价)

回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(多指标评价) 文章目录 回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(多指标评价)预测效果基本介绍程序设计参考资料预测效果 基本介绍 GRU神经网络是LST...

驱动程序开发:Buildroot根文件系统构建并加载驱动文件xxx.ko测试

目录一、buildroot根文件系统简介二、buildroot下载三、buildroot构建根文件系统1、配置 buildroot①配置 Target options②配置 Toolchain③配置 System configuration④配置 Filesystem images⑤禁止编译 Linux 内核和 uboot2、 buildroot 下的 busybox 配置①修改 Makefile&…...

R+VIC模型融合实践技术应用及未来气候变化模型预测

目录 理论专题一&#xff1a;VIC模型的原理及特点 综合案例一&#xff1a;基于QGIS的VIC模型建模 理论专题二&#xff1a;VIC模型率定验证 综合案例二&#xff1a;基于R语言VIC参数率定和优化 理论专题三&#xff1a;遥感技术与未来气候变化 综合案例三&#xff1a;运用V…...

第六章.决策树(Decision Tree)—ID3算法,C4.5算法

第六章.决策树(Decision Tree) 6.1 ID3算法,C4.5算法 1.决策树适用的数据类型 比较适合分析离散数据&#xff0c;如果是连续数据要先转换成离散数据再做分析 2.信息熵 1).概念&#xff1a; 一条信息的信息量大小和它的不确定性有直接的关系&#xff0c;要搞清楚一件非常不确…...

springboot+pgbouncer+postgres数据库连接池集成方案及问题解决

期望通过每一次分享&#xff0c;让技术的门槛变低&#xff0c;落地更容易。 —— around 前言 旨在解决微服务项目全是连接池并影响数据库并发连接&#xff0c;作者的环境是基于sprongboot微服务连接postgres数据库&#xff0c;每个微服务的DAO层配置都使用了连接池技术。后续…...

Mysql 常用日期处理函数

Mysql 常用日期处理函数 1 建表语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0; -- ---------------------------- -- Table structure for emp -- ---------------------------- DROP TABLE IF EXISTS emp; CREATE TABLE emp (EMPNO int(4) NOT NULL,ENAME varchar(10…...

Pod中容器的健康检查

健康检查 上篇文章中我们了解了Pod中容器的生命周期的两个钩子函数&#xff0c;PostStart与PreStop&#xff0c;其中PostStart是在容器创建后立即执行的&#xff0c;而PreStop这个钩子函数则是在容器终止之前执行的。除了上面这两个钩子函数以外&#xff0c;还有一项配置会影响…...

信贷系统学习总结(5)—— 简单的风控示例(含代码)

一、背景1.为什么要做风控?目前我们业务有使用到非常多的AI能力,如ocr识别、语音测评等,这些能力往往都比较费钱或者费资源,所以在产品层面也希望我们对用户的能力使用次数做一定的限制,因此风控是必须的!2.为什么要自己写风控?那么多开源的风控组件,为什么还要写呢?是不是想…...

Java知识复习(四)多线程、并发编程

1、进程、线程和程序 进程&#xff1a;进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因此进程是动态的&#xff1b;在 Java 中&#xff0c;当我们启动 main 函数时其实就是启动了一个 JVM 的进程&#xff0c;而 main 函数所在的线程就是这个进程…...

一个9个月测试经验的人,居然在面试时跟我要18K,我都被他吓到了····

2月初我入职了深圳某家创业公司&#xff0c;刚入职还是很兴奋的&#xff0c;到公司一看我傻了&#xff0c;公司除了我一个测试&#xff0c;公司的开发人员就只有3个前端2个后端还有2个UI&#xff0c;在粗略了解公司的业务后才发现是一个从零开始的项目&#xff0c;目前啥都没有…...

zigbee与WIFI同频干扰问题

zigbee与WIFI同频干扰 为了降低Wifi信道与Zigbee信道的同频干扰问题&#xff0c;Zigbee联盟在《Zigbee Home Automation Public Application Profile》中推荐使用11,14,15,19,20,24,25这七个信道。 为什么呢&#xff0c;我们看一下Wifi和Zigbee的信道分布。 WiFi带宽对干扰的…...

git拉取指定的单个或多个文件或文件夹

直接上步骤 初始化仓库 git init拉取远程仓库信息&#xff0c;省略号为仓库地址 git remote add -f origin http://****.git开启 sparse clone git config core.sparsecheckout true配置需要拉取的文件夹 有一个指定一个&#xff0c;有多个指定多个&#xff0c;路径写对即可&a…...

不是,到底有多少种图片懒加载方式?

一、也是我最开始了解到的 js方法&#xff0c;利用滚动事件&#xff0c;判断当时的图片位置是否在可视框内&#xff0c;然后进行渲染。 弊端&#xff1a;代码冗杂&#xff0c;你还要去监听页面的滚动事件&#xff0c;这本身就是一个不建议监听的事件&#xff0c;即便是我们做了…...

CAD坐标有哪些输入方式?来看看这些CAD坐标输入方式!

在CAD设计过程中&#xff0c;有时需要通过已知坐标点来画图&#xff0c;有时又需要通过已知角度和距离来画图&#xff0c;在这种情况下&#xff0c;由于已知条件不同&#xff0c;所以便需要用不同的方式来定位点。那么&#xff0c;你知道CAD坐标有哪些输入方式吗&#xff1f;本…...

铰链、弹簧,特殊的物理关节

title: 铰链、弹簧&#xff0c;特殊的物理关节 date: 2023-02-28T13:32:57Z lastmod: 2023-02-28T14:24:06Z 铰链关节&#xff08;Hinge Join&#xff09;组件 组件-Physics-Hinge Join Anchor 当物体挂载铰链组件以后&#xff0c;组件下Anchor等同于边长为1的立方体。当这…...

Android Studio相关记录

目录Android Studio 便捷插件Android LogcatJava文件的类头模板Android Studio 使用遇到的问题解决方案org.jetbrains.annotations.NullableBuild 控制台编译输出中文乱码Terminal 使用 git 命令窗口git 命令窗口中文乱码Android Studio 便捷插件 Android Logcat 配置路径 Fi…...

Linux 基础介绍-基础命令

文章目录01 学习目标02 Linux/Unix 操作系统简介2.1 Linux 操作系统的目标2.2 Linux 操作系统的作用2.3 Unix 家族历史2.4 Linux 家族历史2.5 Linux 和Unix 的联系2.6 Linux 内核介绍2.7 Linux 发行版本2.8 Unix/Linux 开发应用领域介绍03 Linux 目录结构3.1 Win 和Linux 文件系…...

Linux 进程:程序地址空间 与 虚拟内存

目录一、程序地址空间二、虚拟地址空间1.虚拟内存的原理2.使用虚拟内存的原因&#xff1f;3.如何实现虚拟空间&#xff1f;4.使用虚拟内存的好处本文主要介绍程序地址空间和虚拟地址空间的概念&#xff0c;理解了虚拟地址空间&#xff0c;才可以更好的理解物理内存和进程pcb之间…...

python 密码学编程

最近在看一本书。名字是 python密码学编程。在此做一些笔记&#xff0c;同时也为有需要的人提供一些参考。 ******************************************************************** *        quote : "http://inventwithpython.com/"          …...

【C++ | bug | 运算符重载】定义矩阵(模板)类时,使用 “友元函数” 进行 * 运算符重载时编译报错

作者&#xff1a;非妃是公主 专栏&#xff1a;《C》 博客地址&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录专栏推荐一、类的声明及函数定义二、错误信息三、问题…...

手机网站建设合同/如何推广自己的微信公众号

SimHash是一种文本表示的方法&#xff0c;和TF-IDF一样&#xff0c;但是TF-IDF需要遍历所有文本来计算得到文本的表示&#xff0c;计算量较大。 一.SimHash的计算过程 1.分词 对于中文文本来说&#xff0c;一般都要先进行分词才能进一步得到文本的表示向量。 首先按照一定粒…...

海宁长安网站开发/百度灰色关键词排名代做

一、获取Code 假设我们需要网页授权的页面的地址为redirect_uri 需要获取Code的话我们第一步是跳转到授权地址&#xff0c;我们第一步便是获取拼接授权地址 --采用snsapi_base方式 public partial class WebAuth : System.Web.UI.Page{string Appid "XXXXXXXXXXXXXXXXXX…...

考研网站做刷词/168推广网

2019独角兽企业重金招聘Python工程师标准>>> 比喻是一种很好的手段&#xff0c;但问题在于&#xff1a;当你听到某种比喻时&#xff0c;它会令你的大脑停止思考。有人说&#xff0c;软件架构设计“就像是”建筑的架构设计。不&#xff0c;他们其实并不一 样。虽然这…...

哪些网站做企业招聘不要花钱/冬镜seo

当一个请求到达后&#xff0c;会调用DispatcherServlet的doDispatch( )方法&#xff0c;在此方法中调用拦截器&#xff0c;调用方法栈如下&#xff1a; doDispatch( )方法源码如下&#xff1a; protected void doDispatch(HttpServletRequest request, HttpServletResponse re…...

新手做视频网站好/百度官网首页登录

只用于发post请求 #pragma mark - post请求 - (void)post {// 1.创建请求对象NSURL *url [NSURL URLWithString:"http://192.168.1.200:8080/Server/login"];ASIFormDataRequest *request [ASIFormDataRequest requestWithURL:url];// 2.添加请求参数(请求体中的参…...

温州建设网站公司/seo是什么岗位的缩写

http://www.chromclass.com/product/gc10/...