Spring5学习笔记之整合MyBatis

Springgif.gif

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: Spring专栏
✨特色专栏: MySQL学习
🥭本文内容:Spring5学习笔记之整合MyBatis
🖥️个人小站 :个人博客,欢迎大家访问
📚个人知识库: 知识库,欢迎大家访问

学习参考 :

  • 讲师:孙帅老师
  • 课程:孙哥说Spring5

1.前言

在我们之前的系列文章中,我们已经深入探讨了Spring5的两大核心组件:IOC 和 AOP,它们是Spring框架的基石。下面我们接着讨论开始讨论Spring5对于持久层框架MyBatis的整合,让我们一起开启新的的篇章吧。

2.准备工作

在开始之前,确保您已经安装了以下软件:

  • JDK 1.8或更高版本
  • Maven3.8+
  • Eclipse或IntelliJ IDEA(或您最喜欢的Java IDE)
  • MySQL8.0
  • MyBatis3.5

3.为什么要整合持久层?

Spring整合持久层的主要目的是为了简化和提高应用程序的开发和维护效率,以及提供更好的可扩展性和可测试性。以下是一些Spring整合持久层的好处:

  1. 降低开发复杂性:持久层是应用程序中一个重要的组成部分,负责数据的存储和访问。通过Spring整合持久层,可以使用Spring提供的一致的编程模型和API,简化数据库操作和事务管理的代码,减少开发人员的工作量和复杂性。
  2. 提供事务管理: 持久层通常需要处理事务,确保数据的一致性和完整性。Spring提供了强大的事务管理功能,可以通过声明式事务管理或编程式事务管理来管理事务。整合持久层后,可以轻松地配置和管理事务,而无需手动编写繁琐的事务管理代码。
  3. 支持多种持久化技术: Spring整合持久层提供了对多种持久化技术的支持,如关系型数据库(如MySQL、Oracle)、NoSQL数据库(如MongoDB、Redis)、对象关系映射(ORM)框架(如Hibernate、MyBatis)等。这使得开发人员可以根据项目需求选择合适的持久化技术,并无缝地集成到应用程序中。
  4. 提供数据访问抽象层: Spring提供了一套数据访问抽象层,即Spring Data,它简化了对数据的访问和操作。通过Spring Data,可以使用简洁的API进行常见的数据访问操作,如查询、插入、更新和删除等。Spring Data还提供了对分页、排序、缓存等功能的支持,进一步提高了开发效率。
  5. 支持依赖注入和面向切面编程: Spring的核心特性之一是依赖注入(DI)和面向切面编程(AOP)。通过整合持久层,可以将持久层组件作为Spring的bean进行管理,并通过依赖注入将其注入到其他组件中。同时,可以使用AOP功能来实现横切关注点,如日志记录、性能监控等。
  6. 企业级应用的需求:在JavaEE的开发中,数据存储和管理是不可或缺的部分,尤其当涉及到大量的用户信息、交易记录、商品数据等。为了确保数据的一致性、安全性和高效性,我们需要一种可靠的方法来访问和操作数据库,这就是持久层的职责。

综上所述,Spring整合持久层可以简化开发工作,提供事务管理、多种持久化技术的支持,提供数据访问抽象层,并支持依赖注入和面向切面编程。这些优势使得应用程序更易于开发、维护和扩展,提高了开发效率和代码质量。

4.Spring能与哪些持久层技术整合?

Spring可以与多种持久层技术进行整合,包括但不限于以下几种:

  1. JDBC: Spring提供了JdbcTemplate等工具类来简化JDBC的使用。它提供了一种更简单、更安全、更可靠的方式来执行SQL语句并处理结果集。
  2. ORM框架: Spring与多个ORM框架(对象关系映射)提供商进行了整合,包括Hibernate、MyBatis、JPA等。通过Spring的整合,可以使用ORM框架来简化数据库操作,提供对象级别的持久化。
  3. JPA(Java Persistence API): Spring提供了对JPA的支持,可以通过配置和注解的方式来定义实体类与数据库表之间的映射关系,使用JPA进行对象的持久化操作。
  4. NoSQL数据库: Spring还可以与各种NoSQL数据库进行整合,如MongoDB、Redis、Cassandra等。通过Spring Data模块,可以使用统一的API和命名约定来进行数据访问和操作。
  5. Spring Data JPA: Spring Data JPA是Spring对JPA的扩展,提供了更高级的功能和更简化的API。它结合了Spring和JPA的特性,使得使用JPA更加便捷。
  6. Spring Data JDBC: Spring Data JDBC是Spring对JDBC的扩展,提供了一种更简单的方式来进行JDBC操作。它通过注解和命名约定来进行数据库表和实体类之间的映射,简化了JDBC的使用。
  7. Hibernate (JPA): Hibernate是一个流行的ORM(对象关系映射)框架,而JPA(Java持久化API)是Java平台上的一个规范,Hibernate是JPA的一种实现。Spring为Hibernate提供了HibernateTemplate工具,它可以简化许多常见的Hibernate操作,并且为我们处理事务、会话等常见问题。使用Spring与Hibernate的整合,开发者可以轻松地将数据库记录映射到Java对象,并执行持久化操作。
  8. MyBatis: MyBatis是另一个流行的持久层框架,它允许开发者直接编写SQL,同时提供了灵活的结果映射功能。Spring为MyBatis提供了一系列工具,如SqlSessionFactoryBean和MapperScannerConfigurer,这些工具旨在简化MyBatis配置和使用过程。通过整合,开发者可以在Spring应用中方便地使用MyBatis的特性,同时享受Spring提供的事务管理、依赖注入等功能。

总之,Spring可以与多种持久层技术进行整合,通过提供统一的API和工具类,简化了数据访问和持久化操作的开发工作。无论是关系型数据库还是NoSQL数据库,都可以方便地与Spring整合使用。

5.Spring与MyBatis整合步骤

5.1 MyBatis步骤回顾

MyBatis原生的开发一共有如下几个步骤

1.实体
2.实体别名
3.数据表
4.创建DAO接口
5.实现Mapper文件
6.注册Mapper文件
7.MyBatisAPI的调用

5.2 整合步骤

1.创建Maven项目

首先,我们需要创建一个Maven项目。打开IDEA,选择自己的工作目录,点击确定即可:

image-20231019211823353

创建一个名为Leo-spring-mybatis的新Maven项目。

2.添加依赖项

打开pom.xml文件,并添加以下依赖项:

<dependencies><!-- Spring dependencies --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.9</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.9</version></dependency><!-- MyBatis dependencies --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency><!-- Database driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency>
</dependencies>

这些依赖项将添加所需的Spring和MyBatis库以及MySQL数据库驱动程序。

3.配置配置文件

src/main/resources目录下创建一个名为mybatis-config.xml的新文件,并添加以下内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><typeAlias type="org.javatop.pojo.User" alias="User"/></typeAliases><environments default="default"><environment id="default"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/teach-spring5?useSSL=false"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><!--<package name=""--><mapper resource="UserMapper.xml"/></mappers></configuration>

在这个文件中,我们配置了一个dataSource bean,它使用MySQL数据库的连接信息。然后,我们配置了一个sqlSessionFactory bean,它使用dataSource bean并指定了MyBatis映射文件的位置。最后,我们配置了一个sqlSession bean,它使用sqlSessionFactory bean。

4.创建数据库表以及实体类

SQL语句

CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT COMMENT '编号',`name` varchar(255) DEFAULT NULL COMMENT '名称',`email` varchar(255) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

src/main/java/com/integration目录下创建一个名为User.java的新Java类,并添加以下内容:

package org.javatop.integration;/*** @author : Leo* @version 1.0* @date 2023-10-19 21:37* @description : User实体类*/
public class User {private Integer id;private String name;private String email;public User() {}public User(Integer id, String name, String email) {this.id = id;this.name = name;this.email = email;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", email='" + email + '\'' +'}';}
}

这是一个简单的User类,它包含id、name和email字段,并提供了相应的getter和setter方法以及toString方法。

5.创建数据访问对象(mapper)

src/main/java/com/integration目录下创建一个名为UserDao.java的新Java接口,并添加以下内容:

package org.javatop.integration.mappper;
import org.javatop.integration.pojo.User;
import java.util.List;/*** @author : Leo* @version 1.0* @date 2023-10-19 21:43* @description : UserMapper*/
public interface UserMapper {/*** 通过用户ID查询用户* @param id 用户ID* @return 用户信息*/User getUserById(int id);/*** 查询所有用户* @return 全部用户信息*/List<User> getAllUsers();/*** 添加用户* @param user 用户*/void insertUser(User user);/*** 更新用户* @param user 用户*/void updateUser(User user);/*** 删除用户* @param id 用户id*/void deleteUser(int id);
}

这个接口定义了一些用于操作User对象的方法。

6.创建MyBatis映射文件

src/main/resources/org/javatop/integration/mapper目录下创建一个名为UserMapper.xml的新文件,并添加以下内容:

<mapper namespace="com.integration.mappers.UserMapper"><select id="getUserById" resultType="com.integration.User">SELECT * FROM users WHERE id = #{id}</select><select id="getAllUsers" resultType="com.integration.User">SELECT * FROM users</select><insert id="insertUser" parameterType="com.integration.User">INSERT INTO users (name, email) VALUES (#{name}, #{email})</insert><update id="updateUser" parameterType="com.integration.User">UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}</update><delete id="deleteUser" parameterType="int">DELETE FROM users WHERE id = #{id}</delete>
</mapper>

这个文件定义了一些SQL语句,用于查询、插入、更新和删除用户数据。

7.测试应用程序

test/org/javatop/目录下创建TestMyBatis测试类编写测试方法

/*** 用于测试: 查询所有用户*/@Testpublic void test01() throws IOException {InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userList = userMapper.getAllUsers();for (User user : userList) {System.out.println("user = " + user);}}

控制台打印结果:

image-20231019221207683

5.3 结论

我们详细介绍了如何使用Spring 5整合MyBatis框架来构建一个完整的Java应用程序。我们学习了如何配置Spring和MyBatis,创建数据模型,实现数据访问对象和服务层,以及创建控制器来处理HTTP请求。最后,我们测试了应用程序的不同功能。希望这篇博客对您有所帮助!

5.4 原生MyBatis存在的问题配置繁琐:

  1. 实体别名注册: 在MyBatis中,为每个实体类定义别名可以使XML映射文件中的代码更加简洁。但当有大量实体类时,手动为每一个实体类设置别名会非常繁琐。
  2. Mapper文件注册: 在配置MyBatis时,我们需要为每个Mapper XML文件进行注册,这使得配置文件变得冗长,难以管理。
    包扫描:虽然现代版本的MyBatis提供了package属性来自动扫描别名,但在之前的版本中这是不支持的,增加了使用的复杂性。
    代码冗余:
  3. API调用: 在使用MyBatis API进行数据库操作时,我们往往需要执行多个步骤,包括获取SqlSession、执行操作、处理异常和关闭SqlSession等。这些操作在每次数据库访问时都需要重复,导致代码冗余。
  4. 资源管理: 虽然MyBatis为我们提供了资源的自动管理,但在某些情况下,开发者仍需要手动管理数据库连接、会话等资源,这增加了开发的复杂性。
  5. 异常处理: 在使用MyBatis进行数据库操作时,可能会抛出多种异常。处理这些异常需要额外的代码,使得主逻辑变得不那么清晰。

6.总结

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

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

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

相关文章

nvm 安装 node 安装不上 npm

遇到一个问题 nvm install 18.18.2 node -v 安装上了 npm -v 发现没有安装上 解决办法 nvm -v 查看到自己的 nvm 版本号是 1.1.7 NVM下载 - NVM中文网 下载最新版本的 nvm .exe 文件 nvm list 查看手里 node 的所有版本 nvm uninstall 各个版本只保留一个最低版本 点…

百分点科技受邀参加“一带一路”国际合作高峰论坛

10月17-18日&#xff0c;第三届“一带一路”国际合作高峰论坛在北京成功举行。作为新一代信息技术出海企业代表&#xff0c;百分点科技董事长兼CEO苏萌受邀出席高峰论坛开场活动——“一带一路”企业家大会&#xff0c;与来自82个国家和地区的企业或机构、有关国际组织、经济机…

从功能测试到自动化测试,待遇翻倍,我整理的超全学习指南!

在这个吃技术的IT行业来说&#xff0c;我刚入行的时候每天做的也是最基础的工作&#xff0c;但是随着时间的消磨&#xff0c;我产生了对自我和岗位价值和意义的困惑。 一是感觉自己在浪费时间&#xff0c;另一个就是做了快2年的测试&#xff0c;感觉每天过得浑浑噩噩&#xff…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组队列

《数据结构、算法与应用C语言描述》使用C语言实现数组队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一端称…

并发编程——2.基础概念及其它相关的概述

这篇文章我们来讲一下并发编程中的线程及其相关的概述内容。 目录 1.J.U.C 2.进程、线程、协程 2.1进程 2.2线程 2.3纤程&#xff08;协程&#xff09; 2.4概念小结 3.并发、并行、串行 3.1并发 3.2并行 3.3串行 3.4概念小结 4.CPU核心数和线程数的关系 5.上下文…

直线模组有哪些配件组成的?

直线模组又称线性模组或线性滑台&#xff0c;是自动化设备中重要的传动元件&#xff0c;主要由以下几部分组成&#xff1a; 1、直线导轨&#xff1a;直线导轨又称线性滑轨&#xff0c;是用于直线往复运动场合的重要零部件&#xff0c;它具有比直线轴承更高的额定负载&#xff0…

SpringBoot面试题3:Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? Spring Boot 的核心注解是 @SpringBootApplication。 @SpringBootApplication 是一…

IDEA2023.1版本新建Web项目并配置本地Tomcat

IDEA2023.1版本新建Web项目并配置本地Tomcat 一、新建Web项目 一、新建Web项目 由于我最初是新建了一个空项目作为工作空间的&#xff0c;所以这里选择直接新建module&#xff0c;如下所示。&#xff08;这里使用的是idea的newUI&#xff09; 新建module&#xff0c;输入信息…

waf、yakit和ssh免密登录

WAF安全狗 脏数据适用于所有漏洞绕过waf&#xff0c;但是前提条件垃圾信息必须放在危险信息前&#xff0c;是不能打断原有数据包的结构&#xff0c;不能影响后端对数据包的解析。 以DVWA靶场文件上传为例 新建php文件 上传文件被安全狗拦截 使用bp抓包查看 在数据包Content-…

基于Java的农资采购销售管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

MySQL高可用架构学习

MHA&#xff08;Master HA&#xff09;是一款开源的由Perl语言开发的MySQL高可用架构方案。它为MySQL 主从复制架构提供了 automating master failover 功能。MHA在监控到 master 节点故障时&#xff0c;会提升其中拥有最新数据的 slave 节点成为新的 master 节点&#xff0c;在…

Apache DolphinScheduler 3.0.0 升级到 3.1.8 教程

安装部署可参考官网 Version 3.1.8/部署指南/伪集群部署(Pseudo-Cluster)https://dolphinscheduler.apache.org/zh-cn/docs/3.1.8/guide/installation/pseudo-cluster 也可以参考我写贴子 DolphinScheduler 3.0安装及使用-CSDN博客DolphinScheduler 3.0版本的安装教程https:…

springboot+html实现密码重置功能

目录 登录注册&#xff1a; 前端&#xff1a; chnangePssword.html 后端&#xff1a; controller: Mapper层&#xff1a; 逻辑&#xff1a; 登录注册&#xff1a; https://blog.csdn.net/m0_67930426/article/details/133849132 前端&#xff1a; 通过点击忘记密码跳转…

OpenCV Series : TI - DSP - CCS

Code Composer Studio V5.5 https://www.ti.com/tool/download/CCSTUDIO https://www.ti.com/tool/download/CCSTUDIO/5.5.0.00077

边写代码边学习之mlflow

1. 简介 MLflow 是一个多功能、可扩展的开源平台&#xff0c;用于管理整个机器学习生命周期的工作流程和工件。 它与许多流行的 ML 库内置集成&#xff0c;但可以与任何库、算法或部署工具一起使用。 它被设计为可扩展的&#xff0c;因此您可以编写插件来支持新的工作流程、库和…

设计模式:单例模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

大家好&#xff01;本节主要介绍设计模式中的单例模式。 简介&#xff1a; 单例模式&#xff0c;它是一种常用的软件设计模式&#xff0c;它属于创建类型。单例模式的主要目的是确保一个类仅有一个实例&#xff0c;并提供一个全局访问点。 在单例模式中&#xff0c;一个类只有…

世界国家/地区行驶方向数据

Part1数据背景 道路通行方向规则是交通规则的重要部分之一。不同国家及地区通行方向并不一样&#xff0c;受风俗、习惯、风潮因素等影响。 最近也在学道路行驶&#xff0c;结果差强人意&#xff0c;继续努力吧。祝学车的小伙伴们一次过~ Part2数据详情 今天分享的国家/地区行…

C语言——二周目——输入输出辨析

一、对输入输出的理解 1.明确输入的意义 以往的输入为默认形式&#xff08;标准输入流——stdin——键盘&#xff09;。但是输入的形式不止此一种。可以从键盘上敲出输入的数据&#xff0c;同时也可以将文件中、某个字符串甚至结构体的数据作为输入内容进行输入。 输入&#x…

Required MultipartFile parameter ‘file‘ is not present

出现这个原因我们首先想到的是加一个RequestParam("file")&#xff0c;但是还有可能的原因是因为我们的名字有错误 <span class"input-group-addon must">模板上传 </span> <input id"uploadFileUpdate" name"importFileU…

采用Spring Boot框架开发的医院预约挂号系统3e3g0+vue+java

本医院预约挂号系统有管理员&#xff0c;医生和用户。管理员功能有个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;科室信息管理&#xff0c;预约挂号管理&#xff0c;用户投诉管理&#xff0c;投诉处理管理&#xff0c;通知公告管理&#xff0c;科室分类管理。…