Spring Boot使用配置方式整合MyBatis
文章目录
- 一、实战目标
- 二、步骤概览
- 1. 创建部门映射器接口
- 2. 创建映射器配置文件
- 3. 配置全局映射器
- 4. 测试映射器接口
- 三、详细步骤
- 1、创建部门映射器接口
- 2、创建映射器配置文件
- 3、配置全局映射器
- 4、测试映射器接口
- 四、结语
一、实战目标
在本实战课程中,我们将学习如何在Spring Boot项目中使用配置方式整合MyBatis框架,并实现部门管理功能。
二、步骤概览
- 创建部门映射器接口
- 创建映射器配置文件
- 配置全局映射器
- 测试映射器接口
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 mapperPUBLIC "-//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_idfrom department d left outer join employee e on d.id = e.dep_idwhere 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操作。
相关文章:
Spring Boot使用配置方式整合MyBatis
文章目录 一、实战目标二、步骤概览1. 创建部门映射器接口2. 创建映射器配置文件3. 配置全局映射器4. 测试映射器接口 三、详细步骤1、创建部门映射器接口2、创建映射器配置文件3、配置全局映射器4、测试映射器接口 四、结语 一、实战目标 在本实战课程中,我们将学…...
HarmonyOS第一课-应用程序框架基础习题答案
声明:本题库为最新的HarmonyOS第一课的学习题库,仅供参考学习! 一、判断题 1. 在基于Stage模型开发的应用项目中都存在一个app.json5配置文件、以及一个或多个module.json5配置文件。(正确) 正确(True) 错误(False) -…...
滚雪球学SpringCloud[10.2讲]:微服务项目的性能优化与调优
全文目录: 前言性能优化与调优概述性能优化的核心目标常见的性能瓶颈来源 性能瓶颈分析与调优策略1. 服务间通信优化优化策略: 2. 数据库优化优化策略: 3. 线程池优化优化策略: 4. 缓存优化优化策略: 常见问题的排查与解决1. 慢查…...
EasyExcel将数据库里面的数据生成excel文件
EasyExcel官方文档 1.在model模块导入依赖 <!-- 生成报表--> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version> </dependency> 2.修饰实体类 package…...
【YOLO学习】YOLOv1详解
文章目录 1. 概述2. 算法流程3. 网络结构4. 损失函数 1. 概述 1. YOLO 的全称是 You Only Look Once: Unified, Real-Time Object Detection。YOLOv1 的核心思想就是利用整张图作为网络的输入,直接在输出层回归 bounding box 的位置和 bounding box 所属的类别。简单…...
HarmonyOS应用开发(组件库)--组件模块化开发、工具包、设计模式(持续更新)
致力于,UI开发拿来即用,提高开发效率 常量格式枚举enum格式正则表达式...手机号校验...邮箱校验 文件判断文件是否存在 网络下载下载图片从沙箱中图片转为Base64格式从资源文件中读取图片转Base64 组件输入框...矩形输入框...输入框堆叠效果(…...
python测试开发---前后端交互Axios
Axios 是一个基于 Promise 的 HTTP 客户端,常用于浏览器和 Node.js 中发送 HTTP 请求。它封装了 XMLHttpRequest 和 Node.js 的 http 模块,使得处理网络请求更加简单和直观,尤其适合处理异步请求。以下是 Axios 的基础概念和使用方法…...
删除视频最后几帧 剪切视频
删除视频最后几帧 剪切视频 remove_last.py import subprocess def remove_last_frame(input_file, output_file, frame_rate):command_duration [ffprobe,-v, error,-show_entries, formatduration,-of, defaultnoprint_wrappers1:nokey1,input_file]try:total_duration fl…...
SSM框架学习(四、SpringMVC实战:构建高效表述层框架)
目录 一、SpringMVC简介和体验 1.介绍 2.主要作用 3.核心组件和调用流程理解 4.快速体验 二、SpringMVC接收数据 1.访问路径设置 (1)精准路径匹配 (2)模糊路径匹配 (3)类和方法上添加 RequestMapp…...
戴尔笔记本电脑——重装系统
说明:我的电脑是戴尔G3笔记本电脑。 第一步:按照正常的装系统步骤,配置并进入U盘的PE系统 如果进入PE系统,一部分的硬盘找不到,解决办法:U盘PE系统——出现部分硬盘找不到的解决办法 第二步:磁…...
领夹麦克风哪个品牌音质最好,主播一般用什么麦克风
在这个信息爆炸的时代,清晰的声音传达显得尤为重要。无论是激情澎湃的演讲,还是温馨动人的访谈,一款优质的无线领夹麦克风都能让声音清晰的传播。但市场上产品繁多,如何挑选出性价比高、性能卓越的无线领夹麦克风呢?本…...
华为静态路由(route-static)
静态路由的组成 在华为路由器中,使用ip route-static命令配置静态路由。 一条静态路由主要包含以下要素: 目的地址:数据包要到达的目标IP地址 子网掩码:用于指定目的地址的网络部分和主机部分 下一跳地址(可选&#…...
Focalboard开源项目管理系统本地Windows部署与远程访问协同办公
文章目录 前言1. 使用Docker本地部署Focalboard1.1 在Windows中安装 Docker1.2 使用Docker部署Focalboard 2. 安装Cpolar内网穿透工具3. 实现公网访问Focalboard4. 固定Focalboard公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&am…...
Java如何操作Elasticsearch
目录 前言 Procuct实体类 一、操作索引 二、操作文档 三、查询文档 四、复杂条件查询 五、分页查询 六、结果排序 本文文章介绍的是通过template的方法操作elasticsearch,他的话直接本地注入使用就行,repository方法还需要实现接口,所…...
cpu路、核、线程、主频、缓存
路:主板插口实际插入的 CPU 个数,也可以理解为主板上支持的CPU的数量。每个CPU插槽可以插入一个物理处理器芯片。例如,一台服务器可能有2路或4路插槽,这意味着它最多可以安装2个或4个物理处理器。 核:单块 CPU 上面能…...
【AI算法岗面试八股面经【超全整理】——深度学习】
AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…...
STL——map和set【map和set的介绍和使用】【multimap和multiset】
目录 map和set1.关联式容器2.键值对3.树形结构的关联式容器3.1set3.1.1set的介绍3.1.2set的使用3.1.2.1set的模版参数列表3.1.2.2set的构造3.1.2.3set的迭代器3.1.2.4set基本接口的使用3.1.2.5set使用案例 3.2map3.2.1map介绍3.2.2map的使用3.2.2.1map的构造3.2.2.2map的迭代器…...
【笔记】神领物流配置本地hosts无法访问域名(排除DNS 排除文件编码问题)已解决
第一次看着文档准备项目 踩坑不少 一遇到问题总是想着先自己解决 其实文档里就有解决方法 看文字总是喜欢跳过 导入虚拟机的时候忘记了给它设置ip地址 按照文档来就好了 配置完之后立刻就可以通过域名访问了 以防万一写一个本地hosts文件的路径在这里 通常来说都是ÿ…...
Java | Leetcode Java题解之第424题替换后的最长重复字符
题目: 题解: public class Solution {public int characterReplacement(String s, int k) {int len s.length();if (len < 2) {return len;}char[] charArray s.toCharArray();int left 0;int right 0;int res 0;int maxCount 0;int[] freq n…...
Xcode 16 Pod init 报错
pod init failed in Xcode 16 Issue #12583 CocoaPods/CocoaPods GitHub 根据你提供的步骤,以下是详细的操作指南来解决 CocoaPods 的问题: ### 步骤 1:在 Xcode 中转换项目文件夹为组 1. 打开你的 Xcode 项目。 2. 在左侧的项目导航器…...
智慧树自动刷课终极指南:3分钟快速上手Autovisor免费工具
智慧树自动刷课终极指南:3分钟快速上手Autovisor免费工具 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为智慧树网课的手动操作烦恼吗&#…...
qmcdump终极指南:三步解锁QQ音乐加密音频文件
qmcdump终极指南:三步解锁QQ音乐加密音频文件 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 还在为QQ音乐下…...
用51单片机和HC-SR04超声波模块DIY一个倒车雷达(附完整代码和立创EDA原理图)
51单片机与HC-SR04超声波模块实战:打造高精度倒车雷达系统 在汽车电子和智能硬件领域,倒车雷达作为基础安全装置,其DIY实现不仅能帮助理解超声波测距原理,更是掌握嵌入式系统开发的绝佳实践。本文将手把手教你使用经典的STC89C52单…...
基于RP2040与CircuitPython的HDMI倒计时器:RTC与DVI原生输出实践
1. 项目概述与核心价值如果你手头有一块带HDMI输出的微控制器开发板,比如Adafruit的Feather RP2040 DVI,又恰好需要一个能摆在桌面上、精确到秒的倒计时器,那么今天这个项目就是为你量身定做的。它不仅仅是一个简单的“Hello World”式显示应…...
【Midjourney数字艺术风格终极指南】:20年AI视觉专家亲授7大核心风格参数调优法则(含V6.1新增Realism Mode实测数据)
更多请点击: https://intelliparadigm.com 第一章:Midjourney数字艺术风格演进与V6.1核心变革 Midjourney自V1发布以来,其图像生成范式经历了从纹理模拟到语义理解、从风格模仿到跨模态协同的深层跃迁。V6.1标志着模型首次在原生架构中集成…...
基于Stable Diffusion与LoRA技术打造个人AI头像:从原理到实战
1. 项目概述:当AI开始“自拍”——SelfyAI的定位与核心价值最近在AI图像生成领域,一个名为SelfyAI的项目引起了我的注意。它不是一个简单的文生图工具,而是瞄准了一个非常具体且高频的需求:生成高质量、风格一致的个人AI头像。简单…...
数据中心碳减排:工作负载迁移与服务器调度优化
1. 数据中心碳减排技术概述 在数字经济时代,数据中心作为信息基础设施的核心载体,其能源消耗和碳排放问题日益凸显。据统计,全球数据中心电力消耗已占全球总用电量的1-2%,且随着AI、云计算等技术的快速发展,这一比例仍…...
基于CircuitPython与NeoPixel打造可编程LED亚克力灯牌:从硬件选型到代码实现
1. 项目概述:打造你的专属可编程光之铭牌在创客和电子爱好者的世界里,总有一些项目能完美地融合软件编程的灵活性与硬件制作的实体成就感。今天要分享的,就是这样一个让我爱不释手的小玩意儿:一个基于CircuitPython和NeoPixel的可…...
从零部署开源语音助手:OpenClaw项目实战与二次开发指南
1. 项目概述:从开源代码到可用的语音助手看到leilei926524-tech/openclaw-voice-assistant这个项目标题,我的第一反应是:又一个基于开源代码的语音助手项目。在GitHub上,类似的项目多如牛毛,但真正能让一个普通开发者&…...
像素风格技能图标自动生成:Python+Pillow实现模板化设计
1. 项目概述与核心价值最近在和一些做独立开发者和内容创作者的朋友聊天时,发现一个普遍痛点:大家手头都有不少好想法,但一到具体执行,尤其是需要制作宣传素材时,就卡住了。比如,想给自己的新App做个宣传图…...
