Spring Boot 中的 MyBatis 是什么,如何使用

news2024/12/23 12:54:07

Spring Boot 中的 MyBatis 是什么,如何使用

简介

MyBatis 是一种流行的 Java 持久化框架,可以将 SQL 查询映射到对象上,并提供了简单易用的 API 来执行 CRUD 操作。Spring Boot 可以与 MyBatis 集成,提供了简化配置和自动化配置的功能,使得使用 MyBatis 变得更加容易。

在本文中,我们将介绍 Spring Boot 中的 MyBatis,包括如何配置和使用 MyBatis,以及如何使用 MyBatis 进行常见的 CRUD 操作。同时,我们还将介绍如何使用 MyBatis 的注解和 XML 配置文件来编写 SQL 查询。

在这里插入图片描述

配置 MyBatis

在 Spring Boot 中使用 MyBatis,我们需要在 pom.xml 文件中添加 MyBatis 和 MyBatis-Spring 的依赖,如下所示:

<dependencies>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
</dependencies>

接下来,我们需要配置数据库连接信息和 MyBatis 的配置信息。我们可以在 application.properties 文件中指定数据库连接信息,如下所示:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=123456

application.properties 文件中,我们还可以指定 MyBatis 的配置信息,如下所示:

mybatis.config-location=classpath:mybatis-config.xml

在上面的配置中,我们指定了 MyBatis 的配置文件路径为 classpath:mybatis-config.xml。在 MyBatis 的配置文件中,我们可以定义一些 MyBatis 的全局配置,例如是否开启缓存、是否开启延迟加载等。

MyBatis 的基本操作

在配置好 MyBatis 后,我们可以开始使用 MyBatis 进行数据库操作了。MyBatis 提供了两种方式来执行 SQL 查询:XML 配置文件和注解。在下面的示例中,我们将演示如何使用这两种方式来执行 CRUD 操作。

使用 XML 配置文件执行 CRUD 操作

首先,我们需要创建一个 Plain Old Java Object(POJO)类,用来表示数据库中的一条记录。在这个示例中,我们使用 User 类来表示用户信息,如下所示:

public class User {
    
    private Long id;
    private String name;
    private Integer age;
    
    // getters and setters
}

接下来,我们需要创建一个 XML 配置文件,用来定义 SQL 查询和映射关系。在这个示例中,我们创建了一个 UserMapper.xml 文件,定义了一些基本的 SQL 查询和映射关系,如下所示:

<?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.example.mapper.UserMapper">
    
    <resultMap id="userMap" type="User">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="age" property="age"/>
    </resultMap>
    
    <select id="getUserById" resultMap="userMap">
        SELECT * FROM user WHERE id = #{id}
    </select>
    
    <select id="getAllUsers" resultMap="userMap">
        SELECT * FROM user
    </select>
    
    <insert id="insertUser">
        INSERT INTO user (name, age) VALUES (#{name}, #{age})
    </insert>
    
    <update id="updateUserById">
        UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>
    
    <delete id="deleteUserById">
        DELETE FROM user WHERE id = #{id}
    </delete>
    
</xml>

在上面的 XML 配置文件中,我们定义了一个 UserMapper 命名空间,并定义了一个 resultMap 元素,用来映射查询结果到 User 对象上。然后,我们定义了一些 SQL 查询和映射关系,包括 getUserByIdgetAllUsersinsertUserupdateUserByIddeleteUserById。这些 SQL 查询可以通过 MyBatis 的 API 进行调用,从而执行相应的操作。

接下来,我们需要创建一个 Mapper 接口,用来定义访问数据库的 API。在这个示例中,我们创建了一个 UserMapper 接口,包含了上述 SQL 查询对应的方法,如下所示:

public interface UserMapper {
    
    User getUserById(Long id);
    
    List<User> getAllUsers();
    
    void insertUser(User user);
    
    void updateUserById(User user);
    
    void deleteUserById(Long id);
    
}

在上面的 Mapper 接口中,我们定义了五个方法,分别对应上述 SQL 查询。这些方法的名称和参数类型需要与 XML 配置文件中的 SQL 查询对应。

最后,我们可以在 Service 层中调用 Mapper 接口来执行 CRUD 操作。以下是一个简单的示例:

@Service
public class UserService {
    
    @Autowired
    private UserMapper userMapper;
    
    public User getUserById(Long id) {
        return userMapper.getUserById(id);
    }
    
    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }
    
    public void insertUser(User user) {
        userMapper.insertUser(user);
    }
    
    public void updateUserById(User user) {
        userMapper.updateUserById(user);
    }
    
    public void deleteUserById(Long id) {
        userMapper.deleteUserById(id);
    }
}

在上面的 Service 中,我们注入了 UserMapper 接口,并调用相应的方法来执行 CRUD 操作。

使用注解执行 CRUD 操作

除了 XML 配置文件之外,MyBatis 还支持使用注解来定义 SQL 查询。以下是一个使用注解定义 SQL 查询的示例:

@Mapper
public interface UserMapper {
    
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(Long id);
    
    @Select("SELECT * FROM user")
    List<User> getAllUsers();
    
    @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
    void insertUser(User user);
    
    @Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
    void updateUserById(User user);
    
    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteUserById(Long id);
    
}

在上面的代码中,我们使用注解来定义 SQL 查询,并将 @Mapper 注解用于标记这个接口为 MyBatis 的 Mapper 接口。这些 SQL 查询可以直接通过接口的方法调用来执行。

使用注解定义 SQL 查询可以使代码更加简洁和易读,但是相对于 XML 配置文件,注解的可维护性较差,而且难以复用查询语句。

总结

在本文中,我们介绍了 Spring Boot 中如何集成 MyBatis,并演示了如何使用 XML 配置文件和注解来执行 CRUD 操作。MyBatis 是一种流行的 Java 持久化框架,可以将 SQL 查询映射到对象上,并提供了简单易用的 API 来执行 CRUD 操作。通过 Spring Boot 的自动化配置和简化配置,使用 MyBatis 变得更加容易和便捷。使用 MyBatis 可以使数据库操作变得更加简单和高效,同时也可以使代码更加易读和易维护。

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

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

相关文章

基于单片机的智能台灯 灯光控制系统人体感应楼梯灯系统的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b;主通过光敏采集当前光线强度&#xff1b;通过PMW灯光调节电路&#xff0c;我们可以根据不同的光线亮度&#xff0c;进行3挡调节&#xff1b;通过人体红外检测当前是否有人&#xff1b;通过不同光线情况下使用PWM脉冲电路进行调节…

Apifox 已上架至 TitanIDE

Apifox 目前已上架至 TitanIDE 模板&#xff0c;为 TitanIDE 用户提供快速使用接口调试工具的入口。 可以通过 TitanIDE 的「创建项目」快速新建 Apifox 模版&#xff0c;开箱即用。TitanIDE 的模板包括开发者常用的 IDE 及周边开发工具&#xff0c;如数据建模用的 PDmaner、数…

【STM32】GPIO

一、GPIO简介 1. 基本介绍 GPIO是通用输入输出端口的简称&#xff0c;STM32芯片通过GPIO与外设连接&#xff0c;从而实现与外设的数据收发。 最基本的输出功能是由STM32控制引脚输出高、低电平&#xff0c;实现开关控制。如把GPIO引脚接入到LED灯控制LED亮灭&#xff0c;或者…

中小企业的必然选择——构建高效、安全的企业网络

在当今技术驱动的商业环境中&#xff0c;可靠且高效的企业网络对中小型企业的成功是至关重要的。随着对数据密集型应用的需求不断增加&#xff0c;无线网络技术随之迅速发展&#xff0c;企业必须构建一个更快、更安全的网络以保证业务安全稳定开展。本文重点讲解中小型企业网络…

常用stream方法记录

目录 过滤filter()获取最大最小值根据条件统计数量list转mapkey值唯一key值不唯一 distinct去重groupingBy分组map遍历取list中某元素组成新的listlist转数组String基本数据类型数组转换 数组转listArrays.asList(&#xff09;Collections.addAll基本数据类型数组转list 源码和…

阿里云绑定域名

在阿里云安全组与宝塔安全放开8081端口 server {listen 8081;server_name www.whxyyds.top;charset utf-8;location / {root /home/ruoyi/projects/ruoyi-ui;try_files $uri $uri/ /index.html;index index.html index.htm;}location /prod-api/ {proxy_set_header …

途乐证券|A股自动驾驶概念“夏日躁动”

进入7月以后&#xff0c;A股智能汽车产业链——尤其是自动驾驶板块&#xff0c;开始逐渐收复去年失地。 香港途乐证券有限公司&#xff08;191883.com&#xff09;是香港最优秀的股票投资平台&#xff0c;平台致力于为投资者提供专业、安全、诚信的股票策略服务&#xff0c;通过…

微信内置h5浏览器 getBrandWCPayRequest支付

目录 getBrandWCPayRequest支付 什么是getBrandWCPayRequest支付&#xff1f; 如何使用getBrandWCPayRequest支付&#xff1f; getBrandWCPayRequest支付的特点和优势 结论 WeixinJSBridge&#xff1a;微信浏览器的JavaScript桥接工具 WeixinJSBridge的作用 WeixinJSBri…

【震惊】Top1清华考研985考研专业课惨遭团灭!

原谅我今天用了个“UC的标题”&#xff0c;只是他真的太令我震惊了&#xff01;&#xff08;请本次事件受影响者&#xff0c;务必看到最后&#xff0c;我会给出我的建议&#xff09; 事情的起因这样的&#xff1a;这周二有同学发我一条通知&#xff0c;清华大学通信考研考试科…

关于DBC文件的创建增加几点补充

上一节说了&#xff1a;DBC文件的简介与创建 这一节补充几点&#xff1a;关于DBC文件的创建增加几点补充 关于节点地址的定义和修改 有些朋友发现新建某个节点的时候&#xff0c;address栏的内容是灰色的&#xff0c;无法进行定义和修改 这个数值的更改不是在这里进行设置的…

18.ADC模数转换

1.STM32ADC简介&#xff1a; ADC(Analog to Digital Converter)即模数转换器&#xff0c;它可以将模拟信号转换成数字信号。按照其转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。 STM32 ADC主要特性&#xff1a; 12位分辨率&#xff1b;转换结束、注入…

Vue基础 -- 生命周期 数据共享

1 组件的生命周期 1.1 生命周期 & 生命周期函数 生命周期&#xff08;Life Cycle&#xff09;是指一个组件从创建 -> 运行 -> 销毁的整个阶段&#xff0c;强调的是一个时间段。 生命周期函数&#xff1a;是由 vue 框架提供的内置函数&#xff0c;会伴随着组件的生命…

UNI-APP_vmin横屏适配问题

vmax和vmin vmax 相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax vmin 相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin当竖屏布局时750rpx是竖屏布局屏幕的宽度 vmin不管横竖屏的情况下&#xff0c;100vmin都是手机屏幕…

Web漏洞-敏感信息泄露-Git操作

实验目的 熟悉常见git常见操作&#xff0c;如上传、回归、修改仓库等操作。 实验环境 git操作服务器&#xff0c;1台 web安全操作机&#xff0c;1台&#xff08;可选&#xff09; 实验内容 1.安装Git&#xff1a;sudo apt-get install git 2.安装Apache&#xff0c;为了模…

机器学习技术(二)——Python科学运算模块(Numpy、Pandas)

机器学习技术&#xff08;二&#xff09;——Python科学运算模块&#xff08;Numpy、Pandas&#xff09; 文章目录 机器学习技术&#xff08;二&#xff09;——Python科学运算模块&#xff08;Numpy、Pandas&#xff09;一、Numpy1、介绍、安装与导入2、Numpy常用操作 二、Pan…

Java面向对象程序开发——多线程开发

文章目录 前言多线程多线程的实现①、继承Thread类Thread常用方法Thread的构造器优缺点 ②、实现Runnable接口优缺点 ③、实现Callable接口Runnable接口和继承Thread类的区别 线程同步机制volatile同步锁 同步方法lock锁 线程池 前言 线程(thread)是一个程序内部的一条执行路径…

shared_ptr产生内存泄漏的场景

使用 shared_ptr 可以帮助管理动态分配的内存&#xff0c;它使用引用计数的方式来跟踪共享对象的引用数量&#xff0c;当引用计数为零时&#xff0c;会自动释放内存。然而&#xff0c;shared_ptr 也存在一些潜在的内存泄漏的场景&#xff0c;下面是一些常见的情况&#xff1a; …

LVS和keepa lived群集

keepa lived 简述 一.keepalived 服务重要功能 1管理LS负载均衡器软件 keepalived可以通过读取自身的配置文件&#xff0c;实现通过更底层的接口直接管理Lvs配置以及服务的启动 停止功能 这会使 LVS应用跟更加简便 2 支持故障自动切换 (failover) ①两台知己同时安装好kee…

网络字节序和套接字

4.1主机字节序列和网络字节序列 主机字节序列分为&#xff1a;大端字节序和小端字节序 大端&#xff1a;高位字节存储在内存的低地址处&#xff0c;低位字节存储在内存的高地址处。 小端&#xff1a;高位字节存储在内存的高地址处&#xff0c;低位字节存储在内存的低地址处。…

【算法基础】数据结构

链表 单链表 826. 单链表 - AcWing题库 #include<bits/stdc.h> using namespace std; const int N 100010; int m; int e[N],ne[N];//记录数据和下一结点坐标 int head,idx;//当前指向的结点 void init() {head-1;idx0; } void addtohead(int x) {e[idx]x;ne[idx]hea…