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

springboot整合mybatisPlus全技巧(1-整合过程)_第1张图片

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

整合过程

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

1.基本配置

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


    com.baomidou
    mybatis-plus-boot-starter
    3.5.1

这一步就引入了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-整合过程)_第2张图片

编写实体类:

@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-整合过程)_第3张图片

编写Mapper:

public interface DeviceMapper extends BaseMapper {
}

编写Service

public interface DeviceService extends IService {
    
}

编写ServieImpl(实现类)

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

DeviceServiceImpl

@Service
@Slf4j
public class DeviceServiceImpl extends ServiceImpl implements DeviceService {
}

最后是controller,编写DeviceController

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

    @Resource
    private DeviceService deviceService;

    @GetMapping("/list")
    public List 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-整合过程)_第4张图片

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

你可能感兴趣的:(SpringBoot成神之路,spring,boot,后端,java)