【开发】Spring整合MyBatis、MyBatisPlus

news2025/2/27 2:52:42

目录

前言

Spring整合MyBatis

1. 在项目中的pom.xml中导入MyBatis和Spring相关的依赖:

2. 配置数据源

3. 编写实体类

4. 编写API接口

5. 编写单元测试方法(业务)

 Spring整合MyBatis-Plus

1. 在项目中导入依赖:

2. 配置数据源

3. 编写实体类

4. 编写API接口与编写单元测试方法(业务)


前言

什么是MyBatis?

  • MyBatis是一个开源、轻量级的数据持久型框架,是JDBCHibernate的替代方案。

为什么使用MyBatis?

  • MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement等繁杂的过程,开发者只需要关注SQL语句本身。

Spring怎么整合MyBatis?

  • 如下文所示

什么是MyBatis-Plus?

  • MyBatis-Plus简称MP,是MyBatis的增强工具,在MyBatis的基础上扩展了许多实用的功能。

为什么使用MyBatis-Plus?

  1. 简化CRUD操作:MP提供了丰富的内置方法,可以通过简单的方法调用完成常见的CRUD(创建、读取、更新、删除)操作,无需手动编写SQL语句。
  2. 条件构造器:MP提供了强大的条件构造器,可以通过API的方式灵活地拼接查询条件,支持链式调用,使得复杂的查询条件更加可控和易于维护。
  3. 分页查询:支持快速、简单地进行分页查询,减少手动编写分页SQL的复杂性,提高了开发效率。
  4. 逻辑删除:MP支持逻辑删除,通过注解配置的方式可以轻松实现逻辑删除的功能,避免在业务代码中手动处理逻辑删除的逻辑。
  5. 乐观锁和数据权限:对乐观锁和数据权限提供了良好的支持,简化了相关的操作和配置。

Spring怎么整合MyBatis-Plus?

  • 如下文第二章所示

Spring整合MyBatis

1. 在项目中的pom.xml中导入MyBatis和Spring相关的依赖:

MySQL的依赖坐标: 

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

MyBatis的依赖坐标:

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>

Lombok的依赖坐标:导入后,自动生成实体类的get、set、无参构造方法和有参构造方法,方便快速搭建项目(多数情况下会导致编译器“报红”,影响开发者对“异常”信息的捕捉

注:使用此Java库,IDEA、Eclipse需要安装Lombok插件,启用注解处理功能或添加配置。

相关搜索:Lombok在IDEA中的使用        Eclipse使用Lombok

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>

Junit的依赖坐标:在项目开发过程中用于“单元测试”某个接口API的逻辑正确性,避免造成过大损失

       <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

2. 配置数据源

在MyBatis的配置文件(一般为 mybatis.xml 或 mybatis-config.xml 文件)中配置全局设置、数据源、映射器等信息

jdbc.properties文件: 

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/2003db?serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=123456

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>
    <!--开启全局配置-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>


    <!--开发模式-->
    <environments default="env">
        <environment id="env">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射器注册-->
    <mappers>
        <package name="com.ape.dao"/>
    </mappers>
</configuration>

解读:

  • 在这里,我们使用
     <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>开启了驼峰命名和下划线命名的自动转换功能。

        Mybatis自动驼峰映射规范:

  1. 数据库的 stu_id 对应实体类中的 stuId;
  2. 数据库的 stu_name 对应实体类中的 stuName;
  • environments 标签内配置了数据源和环境信息;环境名为 env ,使用JDBC作为事务管理器类型,使用 POOLED 数据源类型,配置MySQL数据库的连接信息(驱动、URL、用户名、密码);
    • <property>标签的value属性中使用${jdbc.username}占位符,引用jdbc.properties文件中的属性值 jdbc.username
      • 通常情况下,我们会将敏感的配置信息存储在外部的配置文件中;
      •  jdbc.properties 存储MySQL的连接信息,这样做的好处是可以在不同环境中使用不同的配置,而不修改MyBatis的配置文件;
  • mappers 标签内注册映射器(Mapper)。使用<package>标签指定Mappper接口所在包路径 com.ape.dao,表示MyBatis会扫描该包下的Mapper接口并注册到MyBatis中;

3. 编写实体类

使用Lombok快速构建

案例:

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {

    private int stuId;

    private String stuName;

    private String stuHobby;

    public Student(String stuName, String stuHobby) {
        this.stuName = stuName;
        this.stuHobby = stuHobby;
    }
}

解读:

  • @NoArgsConstructor注解:Lombok注解在编译时自动生成“无参的构造方法”。
  • @AllArgsConstructor注解:自动生成“全参的构造方法”。
  • @Data注解:自动生成“GetterSettertoStringequalshashCode”方法。

4. 编写API接口

案例:

public interface StudentMapper extends BaseMapper<Student> {

    @Select("select * from student")
    public List<Student> findAll();

    @Insert("insert into student (stu_name,stu_hobby) value(#{stuName},#{stuHobby})")
    public void save(Student student);
}

5. 编写单元测试方法(业务)

在 test文件夹下 => java文件夹下 => 创建包 =>在包下创建测试类

案例: 

public class Test01 {
    SqlSession sqlSession = null;
    StudentMapper studentMapper = null;
    InputStream inputStream = null;

    @Before
    public void beforeMethod(){
        try {
            inputStream = Resources.getResourceAsStream("mybatis.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = sqlSessionFactoryBuilder.build(inputStream);
            sqlSession = factory.openSession(true);//开启事务自动提交
            studentMapper = sqlSession.getMapper(StudentMapper.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @After
    public void afterMethod(){
        try {
            sqlSession.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


     @Test
    public void show1(){
        studentMapper.save(new Student("会诚意","创可贴"));
    }

    @Test
    public void show2(){
        List<Student> all = studentMapper.findAll();
        for (int i = 0; i < all.size(); i++) {
            Student student =  all.get(i);
            System.out.println(student);
        }
    }
}

解读:

  • @Before @After 注解修饰的方法 会分别在每个测试方法(被 @Test 包围的方法)执行前和执行后允许。
  • 案例中@Before注解方法 :获取名为 “mybatis.xml” 的配置文件资源,创建SqlSessionFactorySqlSession以及相应的Mapper对象。
  • 案例中@After注解方法:关闭SqlSession并且关闭输入流。
  • 案例中@Test注解方法:表示它是一个测试方法,在一个测试类中,可以创建多个不同名,但被注解修饰的方法。

 Spring整合MyBatis-Plus

1. 在项目中导入依赖:

MySQL的依赖坐标:

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

MyBatis-Plus的依赖坐标:

        <!--mybatis plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.1.1</version>
        </dependency>

Junit的依赖坐标:

        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

Lombok的依赖坐标:

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>

2. 配置数据源

<?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>
    <!--开启全局配置-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--插件-->
    <plugins>
        <!--mp分页插件-->
        <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></plugin>
    </plugins>

    <!--开发模式-->
    <environments default="env">
        <environment id="env">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/2307db?serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射器注册-->
    <mappers>
        <package name="com.apesource.dao"/>
    </mappers>
</configuration>

总结:

  • 除了加入了
    <plugins>
        <!--mp分页插件-->
        <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></plugin>
    </plugins>
    加入了MyBatis-Plus的分页插件外,其他配置与 Spring 整合 MyBatis 的大差不差。

3. 编写实体类

使用Lombok快速构建:与整合MyBatis不同的是使用了MP的注解

@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName(value = "student")
public class Student {
    @TableId(value = "stu_id",type = IdType.AUTO)
    private int stuId;
    @TableField(value = "stu_name")
    private String stuName;
    @TableField(value = "stu_hobby")
    private String stuHobby;

    public Student(String stuName, String stuHobby) {
        this.stuName = stuName;
        this.stuHobby = stuHobby;
    }
}

解读:

  • @TableName(value = "student"):用于指定实体对应的表名。
  • @TableId(value = "stu_id",type = IdType.AUTO):用于表示主键字段,并且设置了主键自增。
  • @TableField(value = "stu_name") @TableField(value = "stu_hobby"):用于指定实体类字段和数据库表字段的映射关系。将实体类字段 stuName  stuHobby 分别映射到数据库表中的列 stu_name  stu_hobby

4. 编写API接口与编写单元测试方法(业务)

MP是在MyBatis上做了扩展,所以编写接口和编写实现业务和MyBatis差不多,这里不再一一赘述,后面更新MP在这两个方面上对MyBatis的扩展。


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

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

相关文章

Java Virtual Machine

JVM 1、初始 JVM 简单描述一下 JVM &#xff1a;JVM 本质是一个运行在计算机上的程序&#xff0c;它的职责是运行字节码文件。 JVM 的三大功能&#xff1a; 解释和运行&#xff1a;对字节码文件中的指令&#xff0c;实时的解释成机器码&#xff0c;让计算机执行内存管理&am…

webpack5零基础入门-10babel的使用

Babel JavaScript 编译器。 主要用于将 ES6 语法编写的代码转换为向后兼容的 JavaScript 语法&#xff0c;以便能够运行在当前和旧版本的浏览器或其他环境中 1.安装相关包 npm install -D babel-loader babel/core babel/preset-env 2.进行相关配置 2.1第一种写法是在webp…

【C语言入门】浮点型数据在内存中的存储

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C语言 个人主页&#xff1a;Celias blog~ 目录 ​编辑 引言 引例 一、浮点型在内存中的存储方式 1.1 …

Employing Multi-Estimations for Weakly-Supervised Semantic Segmentation

eighted selective training (WST) 辅助信息 作者未提供代码

Vue+SpringBoot打造婚恋交友网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

解决分布式事务,Seata真香!

年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验等…

模型、算法、数据模型、模型结构是什么?它们之间有什么关联和区别?

模型、算法、数据模型、模型结构是什么&#xff1f;它们之间有什么关联和区别&#xff1f; 导读一、算法1、算法定义2、机器学习算法定义 二、模型1、模型定义2、数据模型定义3、机器学习模型定义 三、模型结构1、线性模型2、基于实例的模型3、决策树模型4、支持向量机5、集成方…

WebRTC:真正了解 RTP 和 RTCP

介绍 近年来&#xff0c;通过互联网进行实时通信变得越来越流行&#xff0c;而 WebRTC 已成为通过网络实现实时通信的领先技术之一。WebRTC 使用多种协议&#xff0c;包括实时传输协议 (RTP) 和实时控制协议 (RTCP)。 RTP负责通过网络传输音频和视频数据&#xff0c;而RTCP负责…

网络原理(2)——TCP协议

目录 一、TCP协议段格式 二、确认应答 三、超时重传 TCP全称为&#xff1a;"传输控制协议 Transmission Control Protocol)"。协议如其名&#xff0c;要对数据的传输进行一个详细的控制。 一、TCP协议段格式 源 / 目的端口号&#xff1a;表示数据从哪个进程来&am…

稀碎从零算法笔记Day20-LeetCode:回文链表

题型&#xff1a;链表、双指针 链接&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 234. 回文链表 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述&#xff08;红字为笔者添加&#xff09; 给你一个单链表的头节点 head &…

.rmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 近年来&#xff0c;勒索病毒的威胁日益增加&#xff0c;其中一种名为.rmallox的勒索病毒备受关注。这种病毒通过加密文件并勒索赎金来威胁受害者。本文将介绍.rmallox勒索病毒的特点&#xff0c;以及如何恢复被其加密的数据文件&#xff0c;并提供预防措施&a…

三、传输层拥塞控制、差错控制

3.1 概述和传输层服务 传输服务和协议&#xff1a; 为运行在不同主机上的应用进程提供逻辑通信&#xff1b; 传输协议运行在端系统-发送方:将应用层的报文分成报文段&#xff0c;然后传递给网络层&#xff1b;接收方&#xff1a;将报文段重组成报文&#xff0c;然后传递给应用…

【C#图解教程】笔记

文章目录 1. C#和.NET框架.NET框架的组成.NET框架的特点CLRCLICLI的重要组成部分各种缩写 2. C#编程概括标识符命名规则&#xff1a; 多重标记和值格式化数字字符串对齐说明符格式字段标准数字格式说明符标准数字格式说明符 表 3. 类型、存储和变量数据成员和函数成员预定义类型…

【图论】计算图的n-hop邻居个数,并绘制频率分布直方图

计算图的n-hop邻居个数&#xff0c;并绘制频率分布直方图 在图论中&#xff0c;n-hop邻居&#xff08;或称为K-hop邻居&#xff09;是指从某个顶点出发&#xff0c;通过最短路径&#xff08;即最少的边数&#xff09;可以到达的所有顶点的集合&#xff0c;其中n&#xff08;或…

git如何回退版本reset和revert命令的区别

文章目录 git回退版本的方法使用reset回退使用revert回退 总结 git回退版本的方法 Git回退到某个版本有两种方法&#xff1a;reset和revert。 使用reset回退 git reset --hard <版本号>该命令将HEAD指针移动到指定的版本&#xff0c;并重置工作目录和暂存区的内容。这…

Vue-router3.0版本跳转报错

1.路由创建之后发现控制台push路由跳转报错了 2.解决方法&#xff1a; //在router文件中添加 const originalPush VueRouter.prototype.push VueRouter.prototype.push function push(location) {return originalPush.call(this, location).catch(err > err) }3.解决了

基于单片机的DDS函数信号发生器

单片机DDS函数信号发生器设计 该设计以AT89S52为主控芯片&#xff0c;通过控制高性能DDS&#xff08;直接数字频率合成&#xff09;芯片AD9834产生不同频率的信号&#xff0c;经过6阶巴特沃兹低通滤波电路&#xff0c;连接数字电位器的运算放大电路&#xff0c;输出信号。可以…

P2036 [COCI2008-2009 #2] PERKET

题目描述 Perket 是一种流行的美食。为了做好 Perket&#xff0c;厨师必须谨慎选择食材&#xff0c;以在保持传统风味的同时尽可能获得最全面的味道。你有 &#xfffd;n 种可支配的配料。对于每一种配料&#xff0c;我们知道它们各自的酸度 &#xfffd;s 和苦度 &#xfffd…

安装Pytorch——CPU版本

安装Pytorch——CPU版本 1. 打开pytorch官网2. 选择pip安装pytorch-cpu3.复制安装命令4. 在cmd命令窗口&#xff0c;进入你的虚拟环境4.1 创建虚拟环境4.2 进行安装 5. 安装成功6. 进行测试——如下面步骤&#xff0c;如图6.1 输入 python6.2 输入 import torch6.2 输入 print …

Spring Boot中application配置文件的生效顺序

Spring Boot的一个重要特性就是它的自动配置&#xff0c;这一特性在很大程度上依赖于名称为application的配置文件。本文将详细介绍在Spring Boot中&#xff0c;这些配置文件的加载顺序以及每份文件的应用范围。 文章目录 配置文件的种类配置文件的加载顺序配置文件的环境切换 …