day13-SpringBoot整合MyBatis/Plus
SpringBoot整合MyBatis/Plus
1.SpringBoot整合MyBatis
1.1整合案例
需求:整合SpringBoot和Mybatis,向数据库中查询数据。
项目结构:

1.1.1创建数据库和表
-- 创建数据库 DROP DATABASE IF EXISTS springboot_mybatis; CREATE DATABASE springboot_mybatis; USE springboot_mybatis; -- 创建表 CREATE TABLE monster( `id` INT NOT NULL AUTO_INCREMENT, `age` INT NOT NULL, `birthday` DATE DEFAULT NULL, `email` VARCHAR(255) DEFAULT NULL, `gender` CHAR(1) DEFAULT NULL, `name` VARCHAR(255) DEFAULT NULL, `salary` DOUBLE NOT NULL, PRIMARY KEY(`id`) )CHARSET=utf8;
插入测试数据:

1.1.2引入依赖
在pom.xml中引入mybatis及相关的依赖
<!--导入SpringBoot父工程--> <parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.5.3</version> </parent> <dependencies> <!--web starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mybatis starter--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <!--mysql驱动,使用版本仲裁--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--配置处理器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--springboot test starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--druid 数据源,也可以使用默认的数据源--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.17</version> </dependency> </dependencies>
1.1.3配置数据源
在resource/application.yml中配置数据源,并完成SpringBoot项目启动测试
spring: datasource: #配置数据源 url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver server: port: 9090
创建配置类,设置Druid数据源:
这里如果引入的依赖是druid-starter,可以直接在yml文件中配置
package com.li.springboot.mybatis.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; /** * @author 李 * @version 1.0 */ @Configuration public class DruidDataSourceConfig { @ConfigurationProperties("spring.datasource") @Bean public DataSource dataSource() { DruidDataSource druidDataSource = new DruidDataSource(); return druidDataSource; } }
1.1.4指定mapper.xml路径
在application.yml文件中配置mybatis,指定要扫描的mapper.xml文件的路径
在ssm整合中,这一步也是在applicationContext.xml容器文件中指定
mybatis: mapper-locations: classpath:mapper/*.xml #指定要扫描的mapper.xml路径
1.1.5代码实现
(1)创建JavaBean--Monster.java,用于表映射
package com.li.springboot.mybatis.bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; /** * @author 李 * @version 1.0 */ @Data @NoArgsConstructor @AllArgsConstructor public class Monster { private Integer id; private Integer age; private Date birthday; private String email; private String name; private String gender; private Double salary; }
(2)创建mapper接口,用于声明方法
package com.li.springboot.mybatis.mapper; import com.li.springboot.mybatis.bean.Monster; import org.apache.ibatis.annotations.Mapper; /** * @author 李 * @version 1.0 * 使用注解@mapper,就可以将mapper接口对象注入容器 */ @Mapper//除了使用注解,也可以直接指定要扫描的包 public interface MonsterMapper { //根据id查询数据记录 public Monster getMonsterById(Integer id); }
(3)在resource/mapper目录下创建接口对应的mapper.xml文件,实现声明的方法
<?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.li.springboot.mybatis.mapper.MonsterMapper"> <!--配置getMonsterById方法--> <select id="getMonsterById" resultType="com.li.springboot.mybatis.bean.Monster"> SELECT * FROM `monster` WHERE `id` = #{id} </select> </mapper>
(4)进行测试:
如果要写测试类,一定要写主程序
package com.li.springboot.mybatis; import com.li.springboot.mybatis.bean.Monster; import com.li.springboot.mybatis.mapper.MonsterMapper; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; /** * @author 李 * @version 1.0 */ @SpringBootTest public class ApplicationTest { @Resource private MonsterMapper monsterMapper;//注入的实际上是它的代理类 //测试MonsterMapper接口是否可用 @Test public void getMonsterMapper() { Monster monster = monsterMapper.getMonsterById(1); System.out.println("monster=" + monster); } }
测试结果:成功从数据库中获取信息。

接下来的Service、Controller层和ssm没有多大区别,这里不再赘述
1.1.6补充-对mybatis的配置
- SpringBoot对mybatis的配置有两种方式:
(1)使用传统方式配置,即使用mybatis-config.xml。不过要先在application.yml文件中指定mybatis配置文件的路径。
mybatis: config-location: #指定mybatis-config.xml文件的路径
(2)直接使用application.yml文件进行配置,例如:
mybatis: type-aliases-package: com.li.springboot.mybatis.bean #指定别名 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定标准的日志输出
- 两种方式的选择:
- 如果配置比较简单,可以在yml中直接配置
- 如果配置内容较多,可以单独地做一个配置文件
1.2注意事项和使用细节
SpringBoot中日期默认是格林尼治标准时间,和中国标准时相差8小时,可以通过注解@JsonFormat解决此问题:

其中pattern表示日期格式,timezone表示时区,GMT是格林尼治时间
2.SpringBoot整合MyBatis-Plus
2.1MyBatis-Plus基本介绍
-
MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。
-
强大的CRUD操作:内置了通用Mapper、通用Service,通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类需求。
2.2整合案例
需求:整合SpringBoot和MyBatis-Plus,向数据库中查询数据。
2.2.1创建数据库和表
略,表结构同上。

2.2.2引入依赖
pom.xml文件中引入mybatis-plus starter和其他依赖。
<!--导入SpringBoot父工程--> <parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.5.3</version> </parent> <!--引入必要依赖--> <dependencies> <!--web starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--MyBatis-plus starter--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--配置处理器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--springboot test starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--druid 数据源,也可以使用默认的数据源--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.17</version> </dependency> </dependencies>
2.2.3配置数据源
(1)在resource/application.yml中配置数据源
server: port: 9090 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username: root password: 123456
(2)创建配置类,设置Druid数据源:这一步和mybatis整合相同,见上1.1.3操作
2.2.4代码实现
(1)创建JavaBean--Monster.java,用于表映射(同1.1.4的操作,略)
(2)创建mapper接口,用于声明方法
相比于mybatis需要自己声明方法,MP提供了一个通用的BaseMapper,有很多通用的方法,通过继承,我们就可以直接使用,简化开发
package com.li.springboot.mybatisplus.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.li.springboot.mybatisplus.bean.Monster; import org.apache.ibatis.annotations.Mapper; /** * @author 李 * @version 1.0 * BaseMapper是MyBatisPlus内置的通用Mapper,提供了很多的方法 * 如果它提供的方法不能满足业务需求,我们可以在这里开发新的方法 */ @Mapper public interface MonsterMapper extends BaseMapper<Monster> { }
如果在这一步没有自定义的接口方法,就不需要使用Mapper.xml文件实现声明
(3)开发Service
MP也提供了一个通用的Service接口,里面也提供了很多方法
package com.li.springboot.mybatisplus.service; import com.baomidou.mybatisplus.extension.service.IService; import com.li.springboot.mybatisplus.bean.Monster; /** * @author 李 * @version 1.0 * 1.在mybatis中,是在MonsterService声明方法,然后在其实现类实现 * 2.而在MyBatis-Plus中,我们可以通过继承父接口:IService,从而使用里面的很多方法 * 3.如果它提供的方法不能满足业务需求,再开发新的方法 */ @Service public interface MonsterService extends IService<Monster> { }
注意:如果在业务Service接口声明了自定义方法,通常会创建一个实现类实现接口方法,问题是:由于业务Service接口继承了IService接口,那么业务Service的实现类要同时实现两个接口的方法才行,非常麻烦。
解决方案是:业务实现类通过继承ServiceImpl类解决问题。ServiceImpl类是MyBatis-Plus提供的一个类,它已经实现了IService的方法。这样业务实现类就只需要实现业务Service自定义的方法。

业务实现类MonsterServiceImpl:
package com.li.springboot.mybatisplus.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.li.springboot.mybatisplus.bean.Monster; import com.li.springboot.mybatisplus.mapper.MonsterMapper; import com.li.springboot.mybatisplus.service.MonsterService; /** * @author 李 * @version 1.0 */ public class MonsterServiceImpl extends ServiceImpl<MonsterMapper, Monster> implements MonsterService { //通过继承ServiceImpl,这个实现类中就只用实现业务Service自定义的方法 }
controller层的实现和mybatis的大同小异,这里就不写了
2.2.5补充-对MP的配置
- MyBatis-Plus的配置和MyBatis配置几乎没有区别,在SpringBoot中,同样可以通过如下方式进行配置:
(1)使用传统的配置文件配置,不过要先在application.yml文件中指定配置文件的路径:
mybatis-plus: config-location: xxx #指定mp配置文件的路径
(2)直接使用application.yml文件进行配置,例如:
mybatis-plus: configuration: # 进行mybatis-plus配置,配置项和mybatis一样 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
@MapperScan注解(修饰于主程序)可以替代@Mapper(修饰于mapper接口),basePackages属性可以接收多个值
2.3注意事项和使用细节
(1)@TableName
描述:表名注解,标识实体类对应的表。如果实体类的类名和表名一致,则该注解可以省略,否则需要通过@TableName指定表名
(2)为了开发方便,IDEA可以安装MyBatisX插件,参考文档。该插件具有如下功能:XML 跳转、生成代码(需先在 idea 配置 Database 配置数据源)、重置模板、JPA 提示(生成新增、生成查询、生成修改、生成删除)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库