首页 > 其他分享 >springboot整合mybatisPlus全技巧(1-整合过程)

springboot整合mybatisPlus全技巧(1-整合过程)

时间:2023-09-30 21:04:39浏览次数:34  
标签:info status mybatisPlus springboot date 整合 device id name


springboot整合mybatisPlus全技巧(1-整合过程)_java

本文基于 springboot 整合 mybatisPlus 的各种文章早已烂大街的背景下,根据 整合过程MP开发中的常见技巧MP开发中遇到的各种坑 三个方面,来对这一专题做一个全面且实用的总结,基本上只要你吃透这篇文章,开发中关于mybatisplus你能遇到的问题都能迎刃而解了。

整合过程

网上对于springboot 整合 mybatisPlus的文章有很多,但是大多不够全面,有点人云亦云之感,现在对整合过程拆成 2 个步骤:基本配置,快速入门。

1.基本配置

基本配置的第一步是根据现在流行的MP版本,把依赖的代码贴到pom.xml中。 我使用的是3.5.1的版本

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

这一步就引入了mybatisplus的框架,且因为是pringboot项目,就会自动配置。

第二步,是配置Mybatisplus,虽然大部分以及自动配置了,但是为了符合实际开发需要,有些配置需要单独写在application.yml中。

比如,我们会选择打印日志:

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

该配置的作用是打印mybatis的SQL,包含参数,这个在我们调试程序的时候很有用。

很多人看到这里会问,不是还有个 mapperLocation 吗?

回答:那个其实可以不用配置。

就是mapper接口和对应xml,只要在classpath下的同一个目录即可,我们一般可以把xml和接口放在一个包,也可以在resource资源路径新建一模一样的包,专门放xml文件。

当然,别忘了还有数据源配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.zaxxer.hikari.HikariDataSource

如果你要用druid,还需要额外配置druid,druid就是多一些sql监控,不过一般不用也没关系,我这里就没用。

这个datasource是在spring配置下的。

到这一步,基本配置就完毕了。

2.快速入门案例

这一步做一个快速入门案例,就是建一张表,然后做一个crud。

建表:

DROP TABLE IF EXISTS `device_info`;
CREATE TABLE `device_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '设备编号',
  `device_name` varchar(30) NOT NULL COMMENT '设备名称',
  `device_identification` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '设备标识码',
  `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '设备ID',
  `status` int NOT NULL DEFAULT '1' COMMENT '设备状态(0在线,1离线,2未知)',
  `create_date` date NOT NULL COMMENT '设备创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='设备基本信息表';

来一些测试数据:

insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (1, 'crA7', 'cB', '3Jc', 1, '2022-06-22 15:08:57');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (2, 'TQ', 'fEq', 'ThF8N', 1, '2022-05-11 06:29:33');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (3, 'ga', '0e22P', 'P6lM', 1, '2022-11-08 17:24:10');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (4, '8tI', 'zkl', 'X9', 1, '2022-04-10 19:30:19');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (5, 'axO', 'POdTe', 'YTj2', 1, '2022-09-05 02:51:59');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (6, 'hnnR5', '8X', 'x3w8', 1, '2022-05-20 10:11:23');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (7, 'ft', 'tg', 'WYaZ', 1, '2022-09-20 06:43:57');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (8, 'tyz', 'pza', 'nyR', 1, '2022-12-28 17:32:05');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (9, 'Sg', 'yczdk', 'Hex', 1, '2022-03-01 03:40:12');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (10, 'w51j', 'rafe', 'IfBEH', 1, '2022-05-15 12:17:52');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (11, '4V5m3', 'Qm', 'ik', 1, '2022-07-05 07:34:23');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (12, 'rRkh', 'XvldF', 'Tzp', 1, '2022-10-07 15:11:39');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (13, '9p', 'kE', 'DOut', 1, '2022-08-23 12:12:45');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (14, 'P2', 'dlOIV', 'LG', 1, '2022-02-12 23:42:42');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (15, 'XmW', 'm2F', 'vWc', 1, '2022-06-03 17:55:11');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (16, 'oVCMD', 'dx', 'U4xoM', 1, '2022-03-24 08:35:09');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (17, 'z2e', 'OKeL', '8AO', 1, '2022-03-06 04:27:46');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (18, 'tHF', 'YxyCt', 'uTq', 1, '2022-04-22 12:31:03');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (19, '5Al91', 'uR', 'mBf6j', 1, '2022-10-11 08:26:02');
insert into `device_info` (`id`, `device_name`, `device_identification`, `device_id`, `status`, `create_date`) values (20, 'npRWi', '3jNF7', 'kN', 1, '2022-02-21 11:29:50');

检查是否是否插入正确。

springboot整合mybatisPlus全技巧(1-整合过程)_ide_02

编写实体类:

@Data
@TableName("device_info")
public class Device {

    @TableId(type = IdType.AUTO)
    private Long id;

    @TableField
    private String deviceName;

    @TableField
    private String deviceIdentification;

    @TableField
    private String deviceId;

    @TableField
    private Integer status;

    @TableField
    private Date createDate;

}

创建一个mapper包:

springboot整合mybatisPlus全技巧(1-整合过程)_后端_03

编写Mapper:

public interface DeviceMapper extends BaseMapper<Device> {
}

编写Service

public interface DeviceService extends IService<Device> {
    
}

编写ServieImpl(实现类)

一般我们就在service包下新建一个impl包

springboot整合mybatisPlus全技巧(1-整合过程)_java_04

DeviceServiceImpl

@Service
@Slf4j
public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
}

最后是controller,编写DeviceController

@RestController
@RequestMapping("/v1/device")
public class DeviceController {

    @Resource
    private DeviceService deviceService;

    @GetMapping("/list")
    public List<Device> list(){
        return deviceService.list();
    }
}

就添加一个查询全部设备的方法。

启动,发现报错了: No qualifying bean of type 'com.it.demo.mapper.DeviceMapper' available: expected at least 1 bean which qualifies as autowire candidate

意思是DeviceMapper无法注入,这个问题是因为springboot没有扫描到这个mapper。

  • 解决方案1:给 DeviceMapper 添加@Mapper
  • 解决方案2:在启动类配置扫描路径 @MapperScan("com.it.demo.mapper")

我这边选择的是方案2:

@SpringBootApplication
@MapperScan("com.it.demo.mapper")
public class SpringBootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }

}

启动again,这次没报错了,访问: http://localhost:8080/v1/device/list

springboot整合mybatisPlus全技巧(1-整合过程)_后端_05

数据成功返回了,至此快速入门结束。

标签:info,status,mybatisPlus,springboot,date,整合,device,id,name
From: https://blog.51cto.com/u_10957019/7664959

相关文章

  • Java:Springboot和React中枚举值(数据字典)的使用
    目录1、开发中的需求2、实现效果3、后端代码4、前端代码5、接口数据6、完整代码7、参考文章1、开发中的需求开发和使用过程中,通常会涉及四个角色:数据库管理员、后端开发人员、前端开发人员、浏览者数据库使用int类型的数值进行存储(eg:0、1、2)Java代码使用enum枚举类型的对象进行......
  • java springboot项目,mybatisplus,import com.baomidou.mybatisplus.core.mapper.BaseMa
    <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.2</version><!--用版本2.1.9就不行,UserMapper里BaseMapper爆红--></dependency>我的结果是,......
  • SpringBoot笔记
    1.原理SpringApplication这个类主要做了以下四件事情:1、推断应用的类型是普通的项目还是Web项目2、查找并加载所有可用初始化器,设置到initializers属性中3、找出所有的应用程序监听器,设置到listeners属性中4、推断并设置main方法的定义类,找到运行的主类run方法剖析2.......
  • 最近正在集成SpringBoot与MyBatis-plus,体验感很好啊
    sqlCREATETABLE`class`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'编号',`name`varchar(30)DEFAULTNULLCOMMENT'班级名',`floor`int(3)DEFAULTNULLCOMMENT'楼层',`teacher_id`int(11)DEFAULTNULLCOMMENT'老师......
  • 实战指南,SpringBoot + Mybatis 如何对接多数据源
    本文分享自华为云社区 《实战指南,SpringBoot+Mybatis如何对接多数据源》,作者:战斧。在我们开发一些具有综合功能的项目时,往往会碰到一种情况,需要同时连接多个数据库,这个时候就需要用到多数据源的设计。而Spring与Myabtis其实做了多数据源的适配,只需少许改动即可对接多数据源。......
  • SpringBoot实现文件上传的多种方式
    我们平时在项目开发过程中,会遇到许多的文件上传与下载的需求,今天我们就来梳理一下文件上传的代码实现,基于SpringBoot快速搭建服务,集成文件上传功能,包括传统的文件上传方式,也拓展OSS对象存储方式。项目类型是Maven项目一、引入web依赖<dependency><groupId>org.springframework......
  • Web-入门-SpringBoot快速入门 创建springboot web项目
    web入门spring官网spring发展到今天已经形成了一种开发生态圈,spring提供了若干个子项目,为每个项目用于完成特定的功能。这些框架都是基于一个基础框架:直接基于SpringFramework基础框架进行开发会有两大难题:1.配置繁琐。2.入门难度大。所以spring家族意识到了这一点,......
  • 使用SpringBoot开发一个POST接口
    SpringBoot项目的分层SpringBoot框架项目一般分为五层:View层:向用户展示页面Controller层:前后端交互层,接收前端请求,调用Service层中的方法,接收Service层返回的数据并将其返回到前端。Service层:存放业务处理的逻辑,以及一些操作数据库的接口Mapper层:也可以成为DAO层,是数......
  • 在deepin上使用Fleet开发SpringBoot 3.0.0项目
    前言Fleet被称为是由JetBrains打造的下一代IDE,目前出于公测状态,可以免费下载使用。SpringBoot3.0.0最小支持是JDK17,这或许是对于JDK8的断舍离迈出的重大一步。出于对新工具和新技术的好奇,我开始尝试在deepin上用Fleet开发一个SpringBoot3.0.0项目,继续我的SpringBoot学习......
  • SpringBoot启动报错
    问题描述按照以往的代码进行SpringBoot的相应部署,但是爆出来这个错误:问题解决里面说找不到我定义的bean实体类,那就加上这么一条注解,让他能够找到实体类:然后启动:并在浏览器里面查看一下:ok!问题解决!......