SpringBoot 项目整合 MyBatis 框架,附带测试示例

news2025/1/12 1:51:13

文章目录

    • 一、创建 SpringBoot 项目
    • 二、添加 MyBatis 依赖
    • 三、项目结构和数据库表结构
    • 四、项目代码
      • 1、application.yml
      • 2、TestController
      • 3、TbUser
      • 4、TbUserMapper
      • 5、TestServiceImpl
      • 6、TestService
      • 7、TestApplication
      • 8、TbUserMapper.xml
      • 9、MyBatisTest
    • 五、浏览器测试结果
    • 六、Junit 测试结果
    • 七、完整 pom.xml 文件

如果对于 MyBatisPlus 的常见基础知识不了解,可以点击 MyBatisPlus 基础原理、常见注解和注意事项简介

如果有对如何使用 SpringBoot 整合 MyBatisPlus 框架不清楚的,可以点击 超详细的SpringBoot项目整合MyBatisPlus框架步骤示例,并附带浏览器和Junit测试结果示例代码

一、创建 SpringBoot 项目

本文采用 idea 创建简单的 maven 项目, JDK 版本为1.8。图上项目名字无所谓,我是使用 MayBatisPlus 那个项目修改过来的。

在这里插入图片描述

二、添加 MyBatis 依赖

依赖项中的都很重要,包括 MyBatisMySQL 的依赖,还有 SpringBoot 项目的起步依赖,以及对实体类非常有用的 lombok 依赖。MyBatis 和 MyBatisPlus 项目的只是各自的依赖不同,其他都是相同的。

<parent>
	<artifactId>spring-boot-starter-parent</artifactId>
	<groupId>org.springframework.boot</groupId>
	<version>2.7.10</version>
</parent>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
	</dependency>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.16.18</version>
	</dependency>
	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>2.1.3</version>
    </dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.38</version>
	</dependency>
</dependencies>

三、项目结构和数据库表结构

该项目整体结构如下:

MyBatis 项目 结构

数据库表结构如下:

在这里插入图片描述

四、项目代码

1、application.yml

本文使用 yml 的配置文件,配置文件中按层级配置好数据库的信息,项目启动时,会自动根据配置信息连接到数据库。注:要保证数据库是启动状态的。

配置文件中 mapper-locations 要注意配置,如果你的文件名是自定义的,很可能会找不到 mapper 文件位置。

spring:
  datasource:
    url: jdbc:mysql://10.100.5.174:8306/test?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 各位大佬点点赞

mybatis:
  mapper-locations: classpath:mybatis-mapper/*.xml

2、TestController

这里没啥好说的,如果不清楚,说明基础没有学通。

@RestController
public class TestController {

    @Autowired
    private TestService testService;

    @GetMapping("/select")
    public TbUser selectById(@Param("id") int id ){
        return testService.selectById(id);
    }

    @GetMapping("/add")
    public void addTbUser(@Param("id") int id, @Param("username") String username, @Param("password") String password) {
        TbUser tbUser = new TbUser(id, username, password);
        testService.addUser(tbUser);
    }
}

3、TbUser

实体类,一般来说,要与数据库中的表对应上,这里使用了 @TableName @TableId @TableFieldMyBatisPlus 中的注解进行对应。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TbUser {

    private int id;

    private String username;

    private String password;
}

4、TbUserMapper

这里的代码是与 mapper.xml 文件相对应的,xml 文件中的 id 就是指的这个接口中的方法名。

@Mapper
public interface TbUserMapper {

    TbUser selectById(int id);

    void addUser(TbUser tbUser);
}

5、TestServiceImpl

@Service
public class TestServiceImpl implements TestService {

    @Autowired
    private TbUserMapper tbUserMapper;

    @Override
    public TbUser selectById(int id) {
        return tbUserMapper.selectById(id);
    }
    
    @Override
    public void addUser(TbUser tbUser) {
        tbUserMapper.addUser(tbUser);
    }
}

6、TestService

public interface TestService {

    TbUser selectById(int id);

    void addUser(TbUser tbUser);
}

7、TestApplication

@MapperScan("com.wen.mapper")
@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class);
    }
}

8、TbUserMapper.xml

文件中有两点要注意:

  • namespace:对应哪一个文件的数据库表格,要与 TbUserMapper 对应。
  • id 属性:对应 TbUserMapper 接口中的方法名。
<?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.wen.mapper.TbUserMapper">
    <select id="selectById" resultType="com.wen.dto.TbUser">
        SELECT username, password FROM tb_user WHERE id = #{id}
    </select>
    <insert id="addUser" parameterType="com.wen.dto.TbUser">
        INSERT INTO tb_user VALUES (#{id}, #{username}, #{password})
    </insert>
</mapper>

9、MyBatisTest

用于 Junit 测试使用,这里要注意,因为需要连接数据库,所以要先启动 SpringBoot 项目,所以要添加以下两个注解。

  • @RunWith(SpringRunner.class)
    • 因为 SpringRunner.class 继承了 SpringJUnit4ClassRunner.class 且没有进行任何修改。
    • 所以 @RunWith(SpringRunner.class) 基本等同于 `@RunWith(SpringJUnit4ClassRunner.class)`` 。
    • 作用是让测试在 Spring 容器环境下执行。
    • 如果测试类中无此注解,将导致 servicedao 等自动注入失败。
  • @SpringBootTest(classes = TestApplication.class)
    • 确保注解的主类(通常是包含 main 方法的类)在测试类的同一包中或者其子包中。
    • @SpringBootTest 默认会从当前包中查找主类。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class MyBatisTest {

    @Autowired
    private TestService testService;

    @Test
    public void selectTbUser(){
        TbUser tbUser = testService.selectById(3);
        System.out.println(tbUser.toString());
    }
    
    @Test
    public void addTbUser(){
        testService.addUser(new TbUser(4, "wangwu", "6677"));
    }
}

五、浏览器测试结果

启动 TestApplication ,也就是启动 SpringBoot 项目,起步依赖会自动识别项目 application.yml 文件中的数据库配置信息,连接数据库,根据 controller 中的访问路径添加参数,就可以做到对数据库的增删改查。


如图所示,在浏览器上访问 localhost:8080/select?id=2 ,目的是查询 ID 为 2 的 TbUser 信息。

在这里插入图片描述


如图所示,在浏览器上访问 localhost:8080/add?id=3&username=lisi&password=3344 ,目的是添加一条用户记录。

在这里插入图片描述
可以查看数据库对应信息。

在这里插入图片描述

六、Junit 测试结果

运行 selectTbUser() 方法,会出现以下结果。对应浏览器上查询方法。

在这里插入图片描述


运行 addTbUser() 方法,会出现以下结果。对应浏览器上查询方法。

在这里插入图片描述

可以查看数据库对应信息。

在这里插入图片描述

七、完整 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wen</groupId>
    <artifactId>springboot-mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.7.10</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>
</project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1889003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

语音大模型引领自然交互新时代,景联文科技推出高质量语音大模型数据库

近期&#xff0c;OpenAI正式发布语音大模型GPT-4o&#xff0c;可以综合利用语音、文本和视觉信息进行推理&#xff0c;扮演一个个人语音交互助手。 在音频处理方面&#xff0c;它不仅能识别和转录多种口音和方言&#xff0c;改变语音的速度音调和振动&#xff0c;还能进行声音模…

中国桥梁空间分布数据

2020年中国桥梁空间分布数据&#xff0c;共包含102000余条数据。 数据属性表包括&#xff1a;地级市名、区县名、桥梁名称和经纬度。有shp和EXCEl两种格式数据。目前暂没有广西、广东和台湾三个省份数据。

新创建spring项目打包启动直接报错没有主清单

springboot程序打成jar包执行报错&#xff1a; 启用 repackage 目标&#xff1a; 将 true 注释以启用 repackage 目标。 这样会确保在构建过程中生成具有正确清单属性的可执行 JAR 文件。

石墨烯分散液制备方法众多 应用领域广泛

石墨烯分散液制备方法众多 应用领域广泛 石墨烯分散液指将石墨烯纳米片均匀分散在特定溶剂中制成的溶液。石墨烯分散液具有化学稳定性好、生物相容性好、热稳定性好等优势&#xff0c;未来有望在涂料、纤维制品、电池制造、油墨等领域获得广泛应用。 石墨烯分散液以石墨…

银河麒麟V10SP1Nginx代理转发故障socket() failed (24: Too many open files)修改操作系统ulimit值解决实战

银河麒麟V10SP1Nginx代理转发故障socket() failed (24: Too many open files)修改操作系统ulimit值解决实战 一、事故描述 Nginx转发失败&#xff0c;转发代理服务器宕机&#xff01; 翻看Nginx日志 /var/log/nginx日志大量报错如下&#xff1a; socket() failed (24: Too m…

sklearn(Python机器学习库)介绍

0 引言 Sklearn (全称 Scikit-Learn)是基于Python 编程语言的免费软件机器学习库。 Scikit-learn主要是用Python编写的,它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面API 的设计非常好,所有对象的接口简单,很适合新手上路。 Scikit-learn与许多其他Python库很好地…

Zookeeper:Zookeeper集群角色

文章目录 一、Leader选举二、Zookeeper集群角色 一、Leader选举 Serverid&#xff1a;服务器ID&#xff1b;比如有三台服务器&#xff0c;编号越大在选择算法中的权重越大。Zxid&#xff1a;数据ID&#xff1b;服务器中存放的最大数据ID&#xff0c;值越大说明数据越新&#x…

携手共筑爱的桥梁:引导接纳自闭症同学

在孩子的班级中&#xff0c;当自闭症儿童成为我们共同的一员时&#xff0c;作为老师和家长&#xff0c;我们肩负着特别的责任——引导孩子们以开放的心态接纳、善待并关爱他们。 首先&#xff0c;我们要以身作则&#xff0c;展现接纳与尊重。无论是老师还是家长&#xff0c;都…

vue3自定义指令(图文教程)

序&#xff1a; 简单&#xff0c;但是没怎么用&#xff0c;但是小伙伴问了&#xff0c;所以做个教程。 自定义指令我只关心3件事 干啥用的&#xff0c;怎么用的&#xff0c;解决什么痛点怎么全局博文有查阅及参考过以下文章&#xff0c; vue3&#xff1a;自定义指令_vue3自定…

深度学习实战82-新的研究方向:大模型与图模型结合生成大型图模型,大图模型相关挑战和机遇的观点

大家好,我是微学AI,今天给大家介绍一下深度学习实战82-新的研究方向:大模型与图模型结合生成大型图模型,大图模型相关挑战和机遇的观点。随着人工智能的飞速发展,大型模型已成为人工智能领域最新的突破性成就。在图方面,大型模型尚未取得与自然语言处理和计算机视觉等其他…

14-15 为什么我们现在对阅读如此难以接受

写出来感觉很奇怪&#xff0c;但最近我感觉自己失去了阅读能力。长篇文本对我来说尤其具有挑战性。句子很难读完。更别提章节了。章节有很多段落&#xff0c;而段落又由许多句子组成。 啊。 即使在极少数情况下&#xff0c;我读完了一章&#xff0c;下一页上已经有另一章等着…

Next.js 实战 (一):项目搭建指南

前言 时间过得好快&#xff0c;一下就来到2024下半年了。 上半年我为了学习 Nuxt3&#xff0c;从 0 到 1 开发了一个导航网站&#xff1a;Dream Site&#xff0c;目前主要的功能都已完成了&#xff0c;后续有时间再慢慢添加有趣的功能。 下半年开始进攻 Next.js&#xff0c;…

关于 VuePress 的插件

插件就好比第三方功能&#xff0c;例如增加一个阅读进度条、增加光标效果等。VuePress 官网对插件的介绍&#xff1a;插件通常会为 VuePress 添加全局功能。 这里简单介绍几个本站用的插件吧&#xff01; ‍ ‍ 插件就好比第三方功能&#xff0c;例如增加一个阅读进度条、增…

计算机提示找不到xinput1_3.dll缺失,七个详细不同修复方法

在电脑中下载或许启动运行游戏时候我相信各位都会遇到xinput1_3.dll丢失或许找不到xinput1_3.dll文件问题&#xff0c;当遇到这个问题时候要如何修复呢&#xff1f;今天我就给大家详细讲解一下xinput1_3.dll是什么与xinput1_3.dll作用和丢失原因以及xinput1_3.dll丢失要怎么处理…

嵌入式c语言2——预处理

在c语言中&#xff0c;头部内容&#xff0c;如include与define是不参与编译而直接预先处理的 如include相当于把头文件扩展&#xff0c;define相当于做了替换 c语言大型工程创建时&#xff0c;会有调试版本与发行版本&#xff0c;发行时不希望看到调试部分内容&#xff0c;此时…

【数据分享】国家级旅游休闲街区数据(Excel/Shp格式/免费获取)

之前我们分享过从我国文化和旅游部官网整理的2018-2023年我国50个重点旅游城市星级饭店季度经营状况数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff01;文化和旅游部官网上也分享有很多与旅游相关的常用数据&#xff0c;我们基于官网发布的名单文件整理得到全国…

汇聚全球智慧 上海打造人工智能“核爆点”和“新风口”

以下文章来源&#xff1a;证券时报 “以共商促共享 以善治促善智”为主题的世界人工智能大会暨人工智能全球治理高级别会议将于7月4日—6日在上海召开。证券时报记者注意到&#xff0c;大会自2018年创办以来已成功举办六届&#xff0c;成为全球人工智能最具影响力的综合性会议。…

浏览器无法联网问题

浏览器无法联网问题 电脑联网正常&#xff0c;但是服务器显示网络出错或者代理服务器拒绝连接&#xff0c;无法使用浏览器 解决方法 打开电脑【设置】→【网络和Internet】 点击【手动设置代理】→【设置】 关闭【使用代理服务器】&#xff0c;并【保存】 打开【自动检测设…

Day9:逆波兰表达式求值150 滑动窗口最大值239 前 K 个高频元素347

题目150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int evalRPN(vector<string>& tokens) {//使用栈来消除stack<string> st;for(int i0;i<tokens.size();i){if(tokens[i]""||tokens[i]"-"|…

【CUDA】 归约 Reduction

Reduction Reduction算法从一组数值中产生单个数值。这个单个数值可以是所有元素中的总和、最大值、最小值等。 图1展示了一个求和Reduction的例子。 图1 线程层次结构 在Reduction算法中&#xff0c;线程的常见组织方式是为每个元素使用一个线程。下面将展示利用许多不同方…