SpringBoot与MyBatis的快速整合(基于注解)

在这里插入图片描述

文章目录

  • 创建Spring Boot项目
  • 配置数据库连接信息
  • 编写MyBatis Mapper接口
  • 使用XML文件编写SQL映射
  • 配置数据源切换
    • 引入Druid依赖
    • 配置Druid数据源
  • 配置MyBatis支持事务管理

在使用Spring Boot创建新项目或新模块时,如果需要使用MyBatis来进行数据库操作,可以按照以下步骤来快速配置项目,并利用Druid数据源提高性能和管理数据库连接:

创建Spring Boot项目

  1. 打开Spring Initializr网站(start.spring.io)。
  2. 填写项目的基本信息,比如Group、Artifact、Name等。
  3. 在Dependencies中选择以下依赖:
    • MySQL Driver:用于连接MySQL数据库的JDBC驱动程序。
    • MyBatis Framework:MyBatis持久层框架。

创建spring boot新项目或者新模块需要用到mybatis的时候,需要在选择依赖关系的时候勾选MySQL DriverMybatis Framework两个依赖,创建项目即可
在这里插入图片描述

注意:如果在选择依赖时出现MyBatis Framework选项不可用,请切换Spring Boot版本到>=3.2.0 and <3.3.0-M1之间。

  • MySQL Driver是一个用于连接Java应用程序和MySQL数据库的JDBC(Java Database Connectivity)驱动程序。该驱动程序负责在Java应用程序和MySQL数据库之间进行通信,允许应用程序执行SQL查询、更新、插入等数据库操作。

  • MyBatis是一个基于Java的持久层框架,它的主要作用是简化数据库操作,提供了一种更加直观和灵活的方式来执行SQL查询、插入、更新和删除等数据库操作。

配置数据库连接信息

在项目的application配置文件中加上数据库的配置信息(确保MySQL服务正常开启)

spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql:///ssm1username: 用户名password: 密码

最后无需像之前的spring项目加很多配置注解,只需要在访问数据库的数据层接口上方加上@Mapper注解,会自动配置映射文件


编写MyBatis Mapper接口

在MyBatis中,@Mapper注解主要用于标识接口,指示MyBatis框架将这个接口视为一个映射器(Mapper)。映射器是定义数据库操作的接口,而MyBatis会根据这些接口生成对应的实现。

@Mapper注解用于标识一个接口,告诉MyBatis框架这个接口是一个映射器接口,其中定义了与数据库相关的SQL操作。

在数据访问层定义Mapper接口,并使用@Mapper注解标识:

@Mapper
public interface BookDao {@Select("select * from tb1_book where id = #{id}")public Book getByID(Integer id);
}

使用XML文件编写SQL映射

除了在注解中写SQL,也可以使用XML文件来编写SQL映射:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>

<mapper>:这是MyBatis映射文件的根元素。
namespace属性:指定这个Mapper文件的命名空间,通常对应于一个Java接口的全限定名。在这个例子中,它是org.mybatis.example.BlogMapper。命名空间用于区分不同Mapper中的SQL语句,防止命名冲突。
<select>:定义一个SELECT查询。MyBatis中可以使用不同的标签来定义不同类型的SQL操作,例如<insert>、<update>、<delete>等。
id属性:指定这个SQL查询的唯一标识符。在这个例子中,id=“selectBlog”。在Java代码中,通过这个ID来引用这个SQL语句。
resultType属性:指定这个查询的返回结果类型。在这个例子中,返回的结果类型是Blog,即对应的Java类名。

配置数据源切换

如果需要切换到其他数据源(如阿里巴巴的Druid数据源),需要引入对应的Maven依赖,并在配置文件中进行设置。

  • 数据源负责管理数据库连接的创建、分配、释放和维护。在应用程序需要与数据库进行交互时,数据源会提供一个可用的数据库连接,而不是每次都创建一个新的连接。这有助于减少连接的创建和销毁开销,提高性能。

引入Druid依赖

在pom.xml文件中添加Druid依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version>
</dependency>

Druid是一个开源的高性能、可扩展的数据库连接池。它支持监控、防火墙、统计和其他丰富的功能。在Java项目中,Druid常用于管理数据库连接,提高性能,并提供了一些有用的监控和统计功能。

当在项目中引入了这个Maven依赖后,可以在项目中使用Druid作为数据源,提供数据库连接的管理功能。通常,你还需要在配置文件中进行相应的数据源配置,包括连接URL、用户名、密码等。

配置Druid数据源

在Spring Boot项目中,你可以在application.propertiesapplication.yml文件中添加如下配置:

  • YAML活YML文件写法
# 数据库连接配置
spring:datasource:url: jdbc:mysql://localhost:3306/your_databaseusername: your_usernamepassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver# 配置使用Druid数据源datasource:type: com.alibaba.druid.pool.DruidDataSource# Druid连接池的一些配置initial-size: 5  # 初始连接池大小min-idle: 5  # 最小空闲连接数max-active: 20  # 最大活动连接数max-wait: 60000  # 获取连接的最大等待时间(毫秒)time-between-eviction-runs-millis: 60000  # 两次扫描连接池的时间间隔(毫秒)min-evictable-idle-time-millis: 300000  # 连接在池中最小生存的时间(毫秒)validation-query: SELECT 1 FROM DUAL  # 用于校验连接的SQL查询语句test-while-idle: true  # 空闲时是否进行连接的校验test-on-borrow: false  # 取得连接时是否进行连接的校验test-on-return: false  # 归还连接时是否进行连接的校验pool-prepared-statements: true  # 是否缓存PreparedStatementmax-pool-prepared-statement-per-connection-size: 20  # 每个连接上缓存的PreparedStatement数量filters: stat,wall,log4j  # 配置监控统计、防火墙、日志等功能的过滤器列表connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000  # 连接池的扩展属性
  • properties文件写法
# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# 配置使用Druid数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource# Druid连接池的一些配置
spring.datasource.initial-size=5  # 初始连接池大小
spring.datasource.min-idle=5  # 最小空闲连接数
spring.datasource.max-active=20  # 最大活动连接数
spring.datasource.max-wait=60000  # 获取连接的最大等待时间(毫秒)
spring.datasource.time-between-eviction-runs-millis=60000  # 两次扫描连接池的时间间隔(毫秒)
spring.datasource.min-evictable-idle-time-millis=300000  # 连接在池中最小生存的时间(毫秒)
spring.datasource.validation-query=SELECT 1 FROM DUAL  # 用于校验连接的SQL查询语句
spring.datasource.test-while-idle=true  # 空闲时是否进行连接的校验
spring.datasource.test-on-borrow=false  # 取得连接时是否进行连接的校验
spring.datasource.test-on-return=false  # 归还连接时是否进行连接的校验
spring.datasource.pool-prepared-statements=true  # 是否缓存PreparedStatement
spring.datasource.max-pool-prepared-statement-per-connection-size=20  # 每个连接上缓存的PreparedStatement数量
spring.datasource.filters=stat,wall,log4j  # 配置监控统计、防火墙、日志等功能的过滤器列表
spring.datasource.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000  # 连接池的扩展属性

最后创建对应的实体类和Mapper接口进行测试即可!

配置MyBatis支持事务管理

在SpringBoot的入口类中,使用@EnableTransactionManagement注解来启用事务管理器。
在这里插入图片描述
在需要回滚的业务逻辑层的Service类中,使用@Transactional注解来开启事务管理。这样,当方法执行时,如果发生异常,事务会自动回滚。

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

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

相关文章

uniapp实现微信小程序调用云函数【vue2】

在uniapp中的vue 2框架中想要改变默认的目录结构&#xff0c;将装有云函数的文件夹在运行后一起复制到unpackage 文件下&#xff0c;主要用 copy-webpack-plugin 方法来实现&#xff0c;具体步骤如下&#xff1a; 一、创建一个vue 2 框架的uniapp 二、新建一个文件夹装云函数 …

Git【版本控制命令】

02 【本地库操作】 1.git的结构 2.Git 远程库——代码托管中心 2.1 git工作流程 代码托管中心用于维护 Git 的远程库。包括在局域网环境下搭建的 GitLab 服务器&#xff0c;以及在外网环境下的 GitHub 和 Gitee (码云)。 一般工作流程如下&#xff1a; 1&#xff0e;从远程…

轻松掌握系统概况,提升工作效率

作为 Linux 系统管理员,我们经常需要了解系统的基本状况,比如当前时间、系统版本、内核信息、CPU 型号、内存使用等等。但是每次手动执行各种命令来获取这些信息,无疑是一件非常繁琐的事情。 幸运的是,我们可以通过编写一个简单的 shell 脚本来一键获取这些系统信息。让我们一…

Java 环境配置 -- Java 语言的安装、配置、编译与运行

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 002 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

【iOS】内存泄漏检查及原因分析

目录 为什么要检测内存泄漏&#xff1f;什么是内存泄漏&#xff1f;内存泄漏排查方法1. 使用Zombie Objects2. 静态分析3. 动态分析方法定位修改Leaks界面分析Call Tree的四个选项&#xff1a; 内存泄漏原因分析1. Leaked Memory&#xff1a;应用程序未引用的、不能再次使用或释…

我的编程语言学习记录:一段不断探索的旅程

目录 我的编程语言学习记录&#xff1a;一段不断探索的旅程 1.引言 2.我的编程之旅开始 第一站&#xff1a;Python — 简洁之美 第二站&#xff1a;JavaScript — 网页的魔法 第三站&#xff1a;Java — 企业级的力量 3.学习过程中的挑战与克服 1.理解概念 3.记忆语法…

牛客网刷题 | BC118 N个数之和

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 输入数字N&#xf…

Servlet-01

文章目录 Servlet创建Servlet探究Servlet的生命周期 HttpServletWebServlet注解详解 重定向与请求转发ServletContextServletContext中的接口 HttpServletRequestHttpServletResponse状态码解释Cookie Servlet Q&#xff1a;它能做什么呢&#xff1f; A&#xff1a;我们可以通…

Hadoop3:MapReduce源码解读之Map阶段的数据输入过程整体概览(0)

一、MapReduce中数据流向 二、MapTask并行度 1、原理概览 数据块&#xff1a;Block是HDFS物理上把数据分成一块一块。数据块是HDFS存储数据单位。 数据切片&#xff1a;数据切片只是在逻辑上对输入进行分片&#xff0c;并不会在磁盘上将其切分成片进行存储。数据切片是MapRed…

XUbuntu24.04之ch9344(usb转串口芯片)安装驱动(二百四十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

xshell远程无法链接上VM的centos7

1、现象如下&#xff0c; 2.解决办法&#xff1a;查证后发现这个默认的设置为vmnet0 3.参考文章&#xff1a;Xshell连接不上虚拟机centos7_centos7的nat模式可以ping通网络,但是用xshell连不上是什么原因-CSDN博客

从GAN到WGAN(01/2)

从GAN到WGAN 文章目录 一、说明二、Kullback-Leibler 和 Jensen-Shannon 背离三、生成对抗网络 &#xff08;GAN&#xff09;四、D 的最优值是多少&#xff1f;五、什么是全局最优&#xff1f;六、损失函数代表什么&#xff1f;七、GAN中的问题 一、说明 生成对抗网络 &#…

Camtasia Studio怎么自动加字幕呢,Camtasia Studio有什么功能呢

在信息化高度发达的今天&#xff0c;视频作为一种直观、生动的信息表达方式&#xff0c;受到了越来越多人的青睐。无论是教育领域的教学视频&#xff0c;还是企业宣传的推广短片&#xff0c;甚至是个人创作的分享作品&#xff0c;都离不开一款优秀的视频编辑软件。Camtasia Stu…

【Python数据分析--pandas学习笔记】Python数据分析库pandas详细学习笔记(内容详细,适合小白入门),数据分析学习笔记

一&#xff0c;pandas教程 1-1 pandas 安装 1-1-1 使用 pip 安装 pandas: pip install pandas安装成功后&#xff0c;我们就可以导入 pandas 包使用&#xff1a; import pandas1-1-2 查看 pandas 版本 >>> import pandas >>> pandas.__version__ # 查看…

数据+AI 打造企业的“金山银山”

今日之世界&#xff0c;数据是生产资料&#xff0c;而人工智能&#xff08;AI&#xff09;是生产工具&#xff0c;它们的结合&#xff0c;带来的是业务的增长、新质生产力的提升&#xff0c;就是金山银山。 创新是源动力 凡是到过浙江省安吉县余村的人&#xff0c;应该都会被它…

【云原生_K8S系列】Kubernetes 控制器之 Deployment

在 Kubernetes 中&#xff0c;Deployment 是一种高级控制器&#xff0c;负责管理应用的部署和生命周期。它提供了一种声明性的方式来定义应用的期望状态&#xff0c;并确保实际状态与期望状态保持一致。Deployment 可以自动处理应用的滚动更新、扩展和回滚等任务&#xff0c;是…

Recognize Anything: A Strong Image Tagging Model(RAM模型使用方法)

一、RAM模型介绍 这篇论文介绍了一个名为“Recognize Anything Model”&#xff08;RAM&#xff09;的新型基础模型&#xff0c;专用于图像标签识别&#xff08;图像分类&#xff09;。这一模型采用大规模图像-文本配对数据进行训练&#xff0c;无需手动注释&#xff0c;能够在…

关于焊点检测(SJ-BIST)模块实现

关于焊点检测&#xff08;SJ-BIST&#xff09;模块实现 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于焊点检测&#xff08;SJ-BIST&#xff09;模块实现一、引言二、焊点检测功能的实现方法&#xff08;1&#xff09; 输入接口&#x…

数据库(28)——联合查询

对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集。 语法 SELECT 字段列表 FROM 表A... UNION [ALL] SELECT 字段列表 FROM 表B...; 演示 select * from user where age > 22 union all select * from user where age < 50; u…

【Python机器学习】PCA——特征提取(2)

上一篇写过了用单一最近邻分类器训练后的精度只有0.22. 现在用PCA。想要度量人脸的相似度&#xff0c;计算原始像素空间中的距离是一种相当糟糕的方法。用像素表示来比较两张图像时&#xff0c;我们比较的是每个像素的灰度值与另一张图像对应位置的像素灰度值。这种表示与人们…