SpringBoot整合Mybatis-Plus

文章详细介绍了如何在SpringBoot项目中集成Mybatis-Plus,包括引入依赖、分析自动配置原理、创建继承BaseMapper的Mapper接口,以及如何使用Mybatis-Plus进行数据库的CRUD操作,简化Service层的实现。
摘要由CSDN通过智能技术生成

1、导入Mybatis-Plus的starter依赖

  1. Mybatis-Plus官方网址

  2. 导入Mybatis-Plus的依赖

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

    依赖版本可以根据官网地址进行调整

    或者,在创建SpringBoot项目时,使用SpringBoot Initialize直接加入Mybatis-Plus依赖,即可

2、分析Mybatis-Plus的自动配置原理

  1. 对其中的MybatisPlusAutoConfiguration进行分析(这基本上包含了自动配置原理的全部,看不懂的就去补一下注解部分的学习
    在这里插入图片描述

3、编写一个Mapper并继承BaseMapper,并分析BaseMapper的作用

  1. 编写 Mapper 包下的 UserMapper接口

    package com.zhao.admin.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.zhao.admin.bean.User;
    
    public interface UserMapper extends BaseMapper<User> {
    
    }
    

    其中,User的数据库创建如下

    1. 创建User表

      DROP TABLE IF EXISTS user;
      
      CREATE TABLE user
      (
          id BIGINT(20) NOT NULL COMMENT '主键ID',
          name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
          age INT(11) NULL DEFAULT NULL COMMENT '年龄',
          email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
          PRIMARY KEY (id)
      );
      
    2. 添加记录

      INSERT INTO user (id, name, age, email) VALUES
      (1, 'Jone', 18, 'test1@baomidou.com'),
      (2, 'Jack', 20, 'test2@baomidou.com'),
      (3, 'Tom', 28, 'test3@baomidou.com'),
      (4, 'Sandy', 21, 'test4@baomidou.com'),
      (5, 'Billie', 24, 'test5@baomidou.com');
      

4、使用Mybatis-Plus操作数据库

  1. Service层直接调用Mapper操作数据库

    因为Mybatis-Plus在BaseMapper中封装了操作数据库的接口,所以可以直接调用基本的操作数据库的CRUD,复杂的还要自己写(连表查询什么的)

    package com.zhao.admin.service;
    
    import com.zhao.admin.bean.User;
    import com.zhao.admin.mapper.UserMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    
    @Service
    public class UserService {
    
        @Autowired
        UserMapper userMapper;
    
        public User getUserById(Long id) {
            return userMapper2.selectById(id);
        }
    }
    
    
  2. Controller调用Service层

    package com.zhao.admin.controller;
    
    import com.zhao.admin.bean.User;
    import com.zhao.admin.service.UserService;
    import com.zhao.admin.service.UserService2;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    
    @Slf4j
    @Controller
    public class UserController {
    
        @Autowired
        UserService userService;
    
        @ResponseBody
        @GetMapping("/user")
        public User getUserById(@RequestParam("id") Long id) {
            return userService2.getUserById(id);
        }
    
    }
    
    
  3. 测试,使用Postman进行测试

    测试结果如下:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUwQmx6v-1676788018518)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230219100035408.png)]

5、使用Mybatis-Plus简化Service层

  1. 修改目录结构

    service层由service的interface,与对应实现类组成,即:

    1. service的接口(interface)
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WoOJyBdc-1676788018519)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230219134712791.png)]

    2. service的实现类:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IHJdPnXg-1676788018519)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230219134910882.png)]

  2. 编写Service接口,Service接口的实现类的代码

    1. UserService接口代码:

      package com.zhao.admin.service;
      
      import com.baomidou.mybatisplus.extension.service.IService;
      import com.zhao.admin.bean.User;
      
      /**
       * @Author: 
       * @Date: 
       * @Description:
       */
      public interface UserService extends IService<User> {
      
      }
      
    2. UserServiceImpl实现类代码:

      package com.zhao.admin.service.impl;
      
      import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
      import com.zhao.admin.bean.User;
      import com.zhao.admin.mapper.UserMapper;
      import com.zhao.admin.service.UserService;
      import org.springframework.stereotype.Service;
      
      @Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
      
          public User getUserById(Long id) {
              return getById(id);//对应Mybatis-Plus中ServiceImpl中的方法
          }
      }
      

      其中,getById(id)是UserServiceImpl从ServiceIMpl类中继承过来的方法

      按住Ctrl+F12,查看UserSErviceImpl全部的方法,如下:
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wy9Of3Xq-1676788018520)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230219141501020.png)]

      UserServiceImpl有以上方法的原理分析

      从以上可以看出,Mybatis-Plus的IService接口帮我们写了很多方法声明,然后Mybatis-Plus的ServiceImpl又帮助我们实现了对应的接口,我们的实现类又继承了ServiceImpl,所以我们写的实现类UserServiceImpl就有了这些方法。

  3. 注意点

    1. UserService extends IService即,UserService接口继承了IService接口,并传递了参数User,这就告诉了IService操作的对象为User,他所有的方法都是针对User对象操纵的。
    2. UserServiceImpl extends ServiceImpl<UserMapper, User>。即,UserServiceIMpl实现类继承了Mybatis-Plus提供的ServiceImpl的实现类,这就帮助我摩恩不用再去实现继承过来的IService接口中的方法。因为ServiceImp实现类已经帮我们实现了,我们只需调用即可。

6、使用Mybatis-Plus完成CRUD

在Controller层我们就可以轻松使用这些方法了,UserController完成CRUD部分代码如下:

package com.zhao.admin.controller;

import com.zhao.admin.bean.User;
import com.zhao.admin.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Slf4j
@Controller
public class UserController {

    @Autowired
    UserService userService;

    //查询
    @ResponseBody
    @GetMapping("/user")
    public User getUserById(@RequestParam("id") Long id) {
        return userService.getById(id);
    }
    
    /*
     * userService.list();    查询所有的User信息
     * userService.removeById(id);  删除对应id的User记录
     * userService.save(user);   想数据库中插入一条User记录
     * 等等
    /
}

如果有帮助,点个关注,让我们互相学习吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

azuredragonz

相互鼓励,相互帮助,共同进步。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值