Spring Boot使用配置方式整合MyBatis

news2024/11/17 12:34:37

文章目录

  • 一、实战目标
  • 二、步骤概览
    • 1. 创建部门映射器接口
    • 2. 创建映射器配置文件
    • 3. 配置全局映射器
    • 4. 测试映射器接口
  • 三、详细步骤
    • 1、创建部门映射器接口
    • 2、创建映射器配置文件
    • 3、配置全局映射器
    • 4、测试映射器接口
  • 四、结语

在这里插入图片描述

一、实战目标

在本实战课程中,我们将学习如何在Spring Boot项目中使用配置方式整合MyBatis框架,并实现部门管理功能。

二、步骤概览

  1. 创建部门映射器接口
  2. 创建映射器配置文件
  3. 配置全局映射器
  4. 测试映射器接口

1. 创建部门映射器接口

net.huawei.hrsys_ssm.mapper包下创建DepartmentMapper接口,使用@Mapper注解标记。

2. 创建映射器配置文件

resources/mapper目录下创建DepartmentMapper.xml,定义SQL映射。

3. 配置全局映射器

在MyBatis配置文件中指定映射器配置文件位置和别名路径。

4. 测试映射器接口

创建TestDepartmentMapper类,使用@SpringBootTest注解进行测试。

三、详细步骤

1、创建部门映射器接口

@Mapper
public interface DepartmentMapper {
    int insert(Department department);
    int deleteById(int id);
    int update(Department department);
    Department findById(int id);
    List<Department> findAll();
}

2、创建映射器配置文件

  • DepartmentMapper.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="net.huawei.hrsys_ssm.mapper.DepartmentMapper">
    <!-- 插入部门记录 -->
    <insert id="insert" parameterType="Department"
            useGeneratedKeys="true" keyProperty="id">
        insert into department (name, number) values (#{name}, #{number});
    </insert>

    <!-- 删除部门记录 -->
    <delete id="deleteById" parameterType="int">
        delete from department where id = #{id};
    </delete>

    <!-- 更新部门记录 -->
    <update id="update" parameterType="Department">
        update department set name = #{name}, number = #{number} where id = #{id};
    </update>

    <!-- 查询全部部门 -->
    <select id="findAll" resultType="Department">
        select * from department;
    </select>

    <!-- 创建结果映射,一个部门对应多个员工构成的集合 -->
    <resultMap id="DepartmentWithEmployees" type="Department">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="number" column="number"/>
        <collection property="employees" javaType="list" ofType="Employee">
            <id property="id" column="e_id"/>
            <result property="age" column="age"/>
            <result property="gender" column="gender"/>
            <result property="name" column="e_name"/>
            <result property="number" column="e_number"/>
            <result property="depId" column="dep_id"/>
        </collection>
    </resultMap>

    <!-- 按标识符查询部门记录 -->
    <select id="findById" resultMap="DepartmentWithEmployees">
        select d.*, e.id e_id, e.age, e.gender, e.name e_name, e.number e_number, e.dep_id
            from department d left outer join employee e on d.id = e.dep_id
            where d.id = #{id};
    </select>
</mapper>

3、配置全局映射器

mapper-locations: classpath:mapper/*.xml
type-aliases-package: net.huawei.hrsys_ssm.bean

在这里插入图片描述

4、测试映射器接口

package net.huawei.hrsys_ssm;

import net.huawei.hrsys_ssm.bean.Department;
import net.huawei.hrsys_ssm.mapper.DepartmentMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

/**
 * 功能:测试部门映射器接口
 * 作者:华卫
 * 日期:2024年09月25日
 */
@SpringBootTest
public class TestDepartmentMapper {
    @Autowired // 自动装配部门映射器
    private DepartmentMapper departmentMapper;

    @Test // 测试查询全部部门
    public void testFindAll() {
        // 调用部门映射器的查询全部部门方法
        List<Department> departments = departmentMapper.findAll();
        // 利用Lambda表达式遍历部门列表
        departments.forEach(department -> System.out.println(department));
    }

    @Test // 测试按标识符查询部门
    public void testFindById() {
        // 定义标识符
        int id = 1;
        // 调用部门映射器的按标识符查询部门方法
        Department department = departmentMapper.findById(id);
        // 判断部门是否查询成功
        if (department != null) {
            System.out.println(department);
        } else {
            System.out.println("标识符为[" + id + "]的部门不存在~");
        }
    }

    @Test // 测试插入部门
    public void testInsert() {
        // 创建部门对象
        Department department = new Department();
        // 设置部门对象属性
        department.setName("后勤部");
        department.setNumber(5);
        // 调用部门映射器的插入方法
        int count = departmentMapper.insert(department);
        // 判断部门是否插入成功
        if (count > 0) {
            System.out.println("恭喜,部门记录插入成功~");
            System.out.println("插入的记录:" + departmentMapper.findById(5));
        } else {
            System.out.println("遗憾,部门记录插入失败~");
        }
    }

    @Test // 测试更新部门
    public void testUpdate() {
        // 查询id为5的部门
        Department department = departmentMapper.findById(5);
        // 输出更新前记录
        System.out.println("记录更新前:" + department);
        // 设置部门对象属性
        department.setName("保卫部");
        department.setNumber(555);
        // 调用部门映射器的更新部门方法
        int count = departmentMapper.update(department);
        // 判断部门是否更新成功
        if (count > 0) {
            System.out.println("恭喜,部门记录更新成功~");
            // 输出更新后记录
            System.out.println("记录更新后:" + departmentMapper.findById(5));
        } else {
            System.out.println("遗憾,部门记录更新失败~");
        }
    }

    @Test // 测试按标识符删除员工
    public void testDeleteById() {
        // 输出待删除记录
        System.out.println("待删除记录:" + departmentMapper.findById(5));
        // 调用部门映射器的按标识符删除部门方法
        int count = departmentMapper.deleteById(5);
        // 判断部门是否删除成功
        if (count > 0) {
            System.out.println("恭喜,部门记录删除成功~");
        } else {
            System.out.println("遗憾,部门记录删除失败~");
        }
    }
}

四、结语

通过本课程,你将掌握Spring Boot与MyBatis的整合,并能够实现部门管理的CRUD操作。

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

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

相关文章

ChatGPT高级语音助手正式上线!OpenAI:50多种语言、9种声线可选

①OpenAI终于要面向其所有付费用户开放ChatGPT的类人高级人工智能&#xff08;AI&#xff09;语音助手功能——“高级语音模式”&#xff08;AVM&#xff09;&#xff1b; ②所有付费订阅ChatGPT Plus和Team计划的用户&#xff0c;都将可以使用新的AVM功能&#xff0c;不过该模…

qt P2P网络通信(tcp、udp)

一、TCP Qt中的TCP通信是基于Qt框架中的网络模块实现的&#xff0c;主要涉及到QTcpSocket和QTcpServer两个类。TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;适用于需要可靠传输的应用场景&#xff0c;如文件传输…

【实战篇】join语句怎么优化?

背景 在上一篇文章中&#xff0c;我们介绍了 join 语句的两种算法&#xff0c;分别是 Index Nested-Loop Join(NLJ) 和 Block Nested-Loop Join(BNL)。 我们发现在使用 NLJ 算法的时候&#xff0c;其实效果还是不错的&#xff0c;比通过应用层拆分成多个语句然后再拼接查询结…

数字化转型的理论指南:推动企业变革的全面路径

企业数字化转型的战略框架 在当今全球化的数字经济中&#xff0c;企业数字化转型已成为组织发展的核心战略。无论是初创公司还是跨国企业&#xff0c;成功的数字化转型不仅依赖于新技术的应用&#xff0c;还要求从战略到运营的全方位调整。这种转型不仅包括引入先进的技术&…

一键去水印小程序源码系统 下载无水印的高清图片 带完整的安装代码包以及搭建部署教程

系统概述 一键去水印小程序源码系统是一款专为图片去水印设计的软件开发包&#xff08;SDK&#xff09;&#xff0c;它集成了先进的图像处理技术和智能识别算法&#xff0c;能够自动识别并去除图片中的水印&#xff0c;同时保持图片的高清画质不受损。该系统支持多种图片格式&…

树莓派4B配置教程 1

目录 树莓派初次入门 树莓派系统烧录 开启树莓派 为树莓派配置SSH和VNC远程服务 树莓派初次入门 笔者最近入门了树莓派4b&#xff0c;打算后续使用树莓派做点小东西玩玩。 新到手的树莓派&#xff0c;默认是一块白板&#xff0c;我们是需要使用到的有如下这些东西&#xf…

基于AWR1642 讲解TI毫米波雷达开发环境搭建

文章内容同步发布在公众号&#xff08;雷达原理与系统&#xff09;,欢迎关注交流~ 这是第三篇文章&#xff0c;上一篇文章介绍了“TI官方资源介绍和使用”&#xff0c;感兴趣的可以去参考一下。本篇内容打算介绍基于AWR1642讲解TI毫米波雷达开发环境搭建&#xff0c;包括常用的…

24 基于51单片机的公交车报站仿真(LCD12864、DS1302、串口)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS1302时钟模块读取时间&#xff0c;通过LCD12864显示实时时间&#xff0c;然后两个按键&#xff0c;一个按下表示到站&#xff0c;一个按下表示没到站。 到达站点&a…

亚信安全天穹5分钟勒索体检 免费试用今起上线

对于勒索攻击的认知 你是否还停留在“2.0时代”&#xff1f; 勒索攻击无疑是企业面临的最大威胁&#xff0c;2024年上半年&#xff0c;勒索组织数量同步增长超过50%&#xff0c;勒索攻击数量也持续攀升&#xff0c;平均勒索赎金突破520万美元。 当前&#xff0c;勒索攻击治理…

Spring Boot 进阶- 如何从配置文件中获取值?

&emps;在上一篇文章中,我们介绍了两种配置文件的方式,那么在添加完配置文件之后,我们如何从配置文件中获取到对应配置的值呢?这篇文章中我们就来看看这个问题。 一般的说SpringBoot中读取配置文件的方式有两种 @Value注解:基于@Value注解进行配置,一般适用于单个属性…

工业狗转行AI的心路历程,重新来过为时不晚!

言归正传&#xff0c;原本想写一篇人工智能大模型的科普文&#xff0c;为以后整理学习笔记开个头&#xff0c;但是细细琢磨了一下我这半吊子水平&#xff0c;怕是说不齐全。而且&#xff0c;我一直以来都很想跟把自己跨专业/行业转行AI的心路历程跟别人分享一下&#xff0c;希望…

10.1 Linux_并发_进程基本知识

进程和程序的区别&#xff1a; 程序是存放在磁盘上的文件&#xff0c;是静态的。进程就是跑起来的程序&#xff0c;是动态的。它包括创建、调度、执行、消亡。是一个程序所分配资源的总称。 具体提关系如下&#xff1a; 各部分具体含义参考博文"16.C基础_内存管理"…

双token无感刷新(vue3+node.js)

无感刷新的基本原理 使用刷新令牌&#xff08;refresh token&#xff09;&#xff1a; ○ 应用程序在首次登录成功后会获得一个访问令牌&#xff08;access token&#xff09;和一个刷新令牌&#xff08;refresh token&#xff09;。 ○ 访问令牌通常有较短的有效期&#xff0…

2024史上最全网络安全面试题+答案,看完offe拿到手软!

1.1 网络安全行业现状 安全行业起步晚。安全行业整体起来才没几年&#xff0c;多数企业因为资源投入和建设时间原因导致覆盖面和深入度都不够&#xff0c;这其中甚至包括一些国内大厂&#xff0c;并没有想象的那么安全。其安全水位仅能应付一些白帽子级别&#xff0c;针对专业…

产品经理有必要学习大模型技术吗???

产品经理要讨论的&#xff0c;不是有没有必要学习大模型&#xff0c;而是以怎样的姿势拥抱大模型。 我之前公司是外企&#xff0c;还记得当年Iphone刚推出的时候&#xff0c;我的一个同事从东北老家拿着一个U盘跑到北京&#xff0c;跟我们公司部门主管描绘了他设想中PC端产品迁…

终于不用为GPU算力发愁了,FLUX LoRA训练一键启动!(附模型)

FLUX 是一个开源的全新的图像生成器&#xff0c;可以生成逼真的超现实图像&#xff0c;人们称它为 Midjourney 的终结者&#xff0c;下一代 Stable Diffusion 的替代品。 FLUX究竟强大到什么程度&#xff1f;外网到现在为止&#xff0c;都还有抵制它的声音。 Google DeepMind 团…

excel快速入门(二)

Excel的概念说明 文章目录 Excel的概念说明常见术语说明单元格/单元格区域活动单元格/单元格区域行或列单元格引用相对引用绝对引用混合引用 Excel的常见格式说明单元格格式数字格式 Excel 工作表编辑鼠标指针介绍1.白色十字状2.单向黑色箭头状3.双向单竖线箭头状4.双向双竖线箭…

Dubbo框架面试题

1.什么是Dubbo? Dubbo是基于Java的高性能轻量级的RPC分布式服务框架&#xff0c;现已成为 Apache 基金会孵化项目。 2.为什么要使用Dubbo? 随着互联网的快速发展&#xff0c;Web应用程序的规模不断扩大&#xff0c;分布式服务体系结构和流计算体系结构势在必行。 dubbo的…

对博客系统进行自动化测试

博客系统代码&#xff1a;spring-blog taotao/Studying JavaEE Advanced - 码云 - 开源中国 (gitee.com) 自动化脚本代码&#xff1a;BlogAutoTest taotao/Studying JavaEE Advanced - 码云 - 开源中国 (gitee.com) 上线项目地址&#xff1a;博客登陆页 目录 一、博客系统项…

【Spring】lombok、dbUtil插件应用

一、lombok插件 1. 功能&#xff1a;对实体类自动&#xff0c;动态生成get、set方法&#xff0c;无参、有参构造..... 2. 步骤&#xff1a; &#xff08;1&#xff09;idea安装插件(只做一次) &#xff08;2&#xff09;添加坐标 &#xff08;3&#xff09;编写注解 NoArgsCo…