MyBatis:编织数据之美的艺术

在数据库交互的舞台上,MyBatis就如同一位出色的编码艺术家,通过其独特的姿态和技巧,将数据库操作变得既优雅又高效。在这篇博客中,我们将深入研究MyBatis的使用详解,揭开其中的奥秘,感受数据之美的艺术之旅。

最近想搞私域,欢迎各位大佬光临😀😀😀!

在这里插入图片描述

MyBatis简介:编码的诗篇

MyBatis是一款优秀的持久层框架,它通过XML或注解的方式,将数据库操作与Java代码解耦,提供了灵活且强大的数据库访问能力。MyBatis的独到之处在于其简单而直观的操作方式,让数据库操作就如同编写诗篇一般自然。

环境搭建:打开数据库之门

在开始使用MyBatis之前,我们首先需要搭建好相应的开发环境。以下是一些简单的步骤,帮助你快速搭建MyBatis环境。

1. 引入MyBatis依赖

在项目的pom.xml文件中添加MyBatis的依赖:

<dependencies><!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency>
</dependencies>

2. 配置MyBatis XML文件

src/main/resources目录下创建mybatis-config.xml文件,配置MyBatis的核心信息:

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis_example"/><property name="username" value="your_username"/><property name="password" value="your_password"/></dataSource></environment></environments><mappers><!-- 配置Mapper文件的路径 --><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>

请将上述配置文件中的your_usernameyour_password替换为你的数据库用户名和密码。

3. 创建Mapper文件

src/main/resources/mapper目录下创建UserMapper.xml文件,用于编写SQL语句:

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><resultMap id="UserResultMap" type="com.example.model.User"><id property="id" column="id"/><result property="username" column="username"/><result property="password" column="password"/></resultMap><select id="getUserById" resultMap="UserResultMap">SELECT * FROM user WHERE id = #{id}</select><!-- 其他SQL语句可以继续在此添加 -->
</mapper>

这里创建了一个简单的UserMapper.xml文件,包含了一个getUserById的查询语句。

数据库操作:编码的艺术之旅

1. 实体类定义

首先,我们需要定义一个与数据库表对应的实体类。假设我们有一个user表,对应的Java实体类如下:

package com.example.model;public class User {private Long id;private String username;private String password;// 省略getter和setter方法
}

2. 编写Mapper接口

接下来,我们需要编写一个Mapper接口,用于调用MyBatis XML文件中定义的SQL语句。在com.example.mapper包下创建UserMapper.java文件:

package com.example.mapper;import com.example.model.User;public interface UserMapper {User getUserById(Long id);
}

这个接口中定义了一个getUserById方法,用于根据用户ID查询用户信息。

3. 编写Service层

创建一个Service层,用于处理业务逻辑。在com.example.service包下创建UserService.java文件:

package com.example.service;import com.example.mapper.UserMapper;
import com.example.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {private final UserMapper userMapper;@Autowiredpublic UserService(UserMapper userMapper) {this.userMapper = userMapper;}public User getUserById(Long id) {return userMapper.getUserById(id);}
}

这里通过@Autowired注解将UserMapper注入到UserService中,使得我们可以在UserService中调用UserMapper的方法。

4. 控制层调用Service

最后,我们需要在控制层调用UserService来实现数据的查询。在com.example.controller包下创建UserController.java文件:

package com.example.controller;import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {private final UserService userService;@Autowiredpublic UserController(UserService userService) {this.userService = userService;}@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userService.getUserById(id);}
}

在这个控制层中,我们通过@Autowired注解将UserService注入,然后定义了一个getUserById的接口,用于接收前端传递的用户ID并调用UserService进行查询。

运行效果

现在,我们已经完成了MyBatis的简单使用流程。启动你的Spring Boot应用程序,访问http://localhost:8080/user/1,将会得到对应ID为1的用户信息。

这个简单的例子展示了如何使用MyBatis进行数据库操作,将数据库的数据映射到Java实体类中,通过Mapper接口和Service层进行数据操作,最终在控制层提供API接口供前端调用。

MyBatis的优势

MyBatis的优势在于其简洁而强大的功能:

  1. 灵活的SQL语句:MyBatis允许开发者编写原生的SQL语句,提供了极大的灵活性。

  2. 零侵入式:与Hibernate等ORM框架不同,MyBatis是零侵入式的,不会强制开发者继承特定的类或实现特定的接口。

  3. 动态SQL:MyBatis支持动态SQL,可以根据条件生成不同的SQL语句,避免了硬编码。

  4. 易于集成:MyBatis易于集成到Spring等主流框架中,通过简单的配置即可实现数据库访问。

  5. 适用于各种场景:无论是简单的查询还是复杂的数据操作,MyBatis都能胜任,适用于各种场景。

总结

MyBatis就如同一位编码的诗人,通过其简洁而有力的表达,演绎出数据之美的艺术之旅。在这篇博客中,我们深入了解了MyBatis的使用,包括环境搭建、Mapper文件编写、Service层的构建以及控制层的调用。通过这个例子,我希望你能够更好地理解MyBatis的优雅之处,将其运用到实际项目中,为数据库操作带来更多的艺术之美。

MyBatis不仅是一款优秀的持久层框架,更是一场数据之美的艺术盛宴。让我们一同欣赏这场艺术之旅,将MyBatis的优雅融入到我们的编码之中,创造出更加优美、高效的数据交互。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

SpringCloud-Nacos配置管理

在nacos中添加配置文件 如何在nacos中管理配置呢&#xff1f; 然后在弹出的表单中&#xff0c;填写配置信息&#xff1a;如&#xff1a;userservice-dev.yaml 注意&#xff1a;项目的核心配置&#xff0c;需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置…

【机器学习】基于麻雀搜索算法优化的BP神经网络分类预测(SSA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.设计与实现 数据集&#xff1a; 多输入多输出&#xff1a;样本特征24&#xff0c;标签类别…

linux服务器上遇到杀不死的进程怎么办?

想要结束某个进程时&#xff0c;一般会先top一下找到进程号&#xff0c;然后kill xxx。 然而&#xff0c;我最近发现一个两百多兆的进程一直杀不死&#xff0c;kill完一个还会自动产生新的。 此时&#xff0c;可以用以下指令找到自己名下所有正在运行的进程&#xff0c;对症下药…

解决在命令行中输入py有效,输入python无效,输入python会跳转到microsoft store的问题| Bug

目录 如果你已经尝试过将python添加到系统变量在系统变量里把你自己的路径放到应用商店的路径之前删除windowsapps下的python.exe文件 如果你还未将python添加到系统变量没有python安装包且没有配置系统变量 如果你已经尝试过将python添加到系统变量 打开 运行&#xff0c;输入…

【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git

目录 ​编辑 Linux 软件包管理器 yum 软件包: 操作&#xff1a; 拓展&#xff1a;lrzsz简介 Linux开发工具 Linux编辑器-vim使用 vim 的基本概念 命令模式 插入模式 底行模式 vim 命令模式的操作指令 vim 底行模式的操作命令 Linux编译器-gcc/g使用 功能 格…

5_springboot_shiro_jwt_多端认证鉴权_禁用Cookie

1. Cookie是什么 ​ Cookie是一种在客户端&#xff08;通常是用户的Web浏览器&#xff09;和服务器之间进行状态管理的技术。当用户访问Web服务器时&#xff0c;服务器可以向用户的浏览器发送一个名为Cookie的小数据块。浏览器会将这个Cookie存储在客户端&#xff0c;为这个Co…

java的前缀和算法

前缀和的概念 对于一个给定的数组A&#xff0c;它的前缀和数组S中S[i]表示从第1个元素到第i个元素的总和&#xff0c;用公式表示为&#xff1a; SiA1A2A3...An 前缀和的作用 在O(1)的时间求出数组任意区间的区间和。 降低求解的复杂度 算法模板 int n10; int [] arrnew in…

【Linux】盘点广义层面上【三种最基本的进程状态】

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

SQL语句之SELECT语句

一般格式 SELECT DISTINCT/ALL 目标列表达式 //要显示的属性列 FROM 表名/视图名 //查询的对象 WHERE 条件表达式 //查询条件 GROUP BY 列名 HAVING 条件表达式 //查询结果分组 ORDER BY 列名 次序; //最终查询结果排序 文章目录 一、基本查询 1、SELECT 目标列表达…

进程(2)——进程优先级

1、基本概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用&#xff0c;可以改善系统性能。 还可以把进程运行到指定的CPU上&#xff0c;这样一来&a…

Spring MVC开发小练习

1. 加法计算器 需求&#xff1a;输入两个整数&#xff0c;计算和 约定前后端交互接口&#xff1a; 在开发项目前&#xff0c;根据需求先约定好前后端交互接口&#xff0c;双方按照接口文档进行开发&#xff0c;接口文档一旦写好&#xff0c;尽量不要轻易改变&#xff0c;如果…

Springboot+vue的船舶维保管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的船舶维保管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

2024最新自动化测试面试题合集 (附答案)

1、你会封装自动化测试框架吗&#xff1f; 这个问得最多&#xff0c;甚至有很多公司直接写在招聘要求中&#xff01; 当然可以&#xff0c;自动化框架主要的核心框架就是分层PO模式&#xff1a;分别为&#xff1a;基础封装层BasePage&#xff0c;PO页面对象层&#xff0c;Tes…

网络编程-DAY6

1>创建一个武器信息库&#xff0c;包含编号&#xff08;主键&#xff09;、名称、属性、描述、价格 2>添加三把武器 3>修改某把武器的价格 4>展出价格在1000到4000的武器 5>卖掉一把武器&#xff0c;删除该武器的信息 6>几天后&#xff0c;客户顶着光头…

HarmonyOS NEXT应用开发之左右拖动切换图片效果案例

介绍 本示例使用滑动手势监听&#xff0c;实时调整左右两侧内容显示区域大小和效果。通过绑定gesture事件中的PanGesture平移手势&#xff0c;实时获取拖动距离。当拖动时&#xff0c;实时地调节左右两个Image组件的宽度&#xff0c;从而成功实现左右拖动切换图片效果的功能。…

C语言之动态内存管理(快点进来!!!)

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

2024全国水科技大会【联合主办】福州水务集团有限公司

福州水务成立于2008年11月&#xff0c;AA信用评级&#xff0c;注册资本21.2亿元。下属各级企业70多家&#xff08;包括3家国家级高新技术企业、1家A股上市企业&#xff09;。集团主营供水、排水、环保、温泉文旅、综合服务五大板块&#xff0c;旗下运营自来水厂17座&#xff0c…

【WSL】Ubuntu 20.04 字符集不认识中文,及其中文路径

1. 问题 $ locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory LANGen_US.UTF-8 LANGUAGE LC_CTYPEUTF-8 LC_NUMERIC"en_US.UTF-8" LC_TIME"en_US.UT…

算法沉淀——贪心算法五(leetcode真题剖析)

算法沉淀——贪心算法五 01.跳跃游戏 II02.跳跃游戏03.加油站04.单调递增的数字 01.跳跃游戏 II 题目链接&#xff1a;https://leetcode.cn/problems/jump-game-ii/ 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转…

redis在springboot项目中的应用

一&#xff0c;将查询结果放到redis中作为缓存&#xff0c;减轻mysql的压力。 只有在数据量大的时候&#xff0c;查询速度慢的时候才有意义。 本次测试的数据量为XXX. 测试代码: 功能为根据昵称进行模糊匹配。 GetMapping("/get-by-nick")public String getNickN…