springboot整合mybatis-plus

  • 1、什么是MyBatis-Plus?
  • 2、springboot整合MyBatis-Plus并使用分页插件
  • 2.1、导入依赖
  • 2.2、在springboot配置文件application.yaml中做数据库配置
  • 2.3、配置分页插件
  • 2.4、在 Spring Boot 启动类中添加 @MapperScan 注解,用于扫描 Mapper 文件夹
  • 2.5、编码测试功能
  • 2.5.1、数据库中建表:
  • 2.5.2、实体类:
  • 2.5.3、持久层:
  • 2.5.4、业务层:
  • 2.5.5、控制层代码
  • 2.5.6、前端页面取出数据
  • 2.5.7、对数据进行分页处理
  • 2.5.8、数据删除操作
  • 3、自动配置
  • 4、mybatis-plus优点


1、什么是MyBatis-Plus?

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。mybatis plus 官网 建议安装 MybatisX 插件

2、springboot整合MyBatis-Plus并使用分页插件

2.1、导入依赖

<!--springboot场景启动器-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

2.2、在springboot配置文件application.yaml中做数据库配置

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: root

2.3、配置分页插件

springboot和mybatisplus版本依赖 springboot2 mybatisplus_分页

@Configuration
public class MyBatisConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }
}

2.4、在 Spring Boot 启动类中添加 @MapperScan 注解,用于扫描 Mapper 文件夹

springboot和mybatisplus版本依赖 springboot2 mybatisplus_分页_02

2.5、编码测试功能

2.5.1、数据库中建表:

springboot和mybatisplus版本依赖 springboot2 mybatisplus_spring_03

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)
);


DELETE FROM user;

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');

2.5.2、实体类:

注解
@TableName:用来将指定的数据库表和 JavaBean 进行映射

@TableField:表示当前属性不是数据库的字段,但在项目中必须使用

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_04


springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_05

2.5.3、持久层:

新建userMapper接口,再使该接口继承**BaseMapper<>**接口,无需再编写mapper.xml文件,即可完成CRUD操作。

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_06

因为在BaseMapper<>接口中定义了多个的方法。

springboot和mybatisplus版本依赖 springboot2 mybatisplus_spring_07

2.5.4、业务层:

编写IUserService接口,该接口机继承IService接口,就无需在IUservice接口中编写业务逻辑代码。

springboot和mybatisplus版本依赖 springboot2 mybatisplus_分页_08

新建IUserService接口的实现类,该类实现IUserService接口。并且实现ServiceImpl类,这样就不用在UseSerrviceImpl类中编写业务代码了。

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_09

2.5.5、控制层代码

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_10


调用userService的page()方法,可以查询出分页数据。

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_11

2.5.6、前端页面取出数据

springboot和mybatisplus版本依赖 springboot2 mybatisplus_分页_12

2.5.7、对数据进行分页处理

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_13

thymeleaf分页条页码显示设置:

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_14

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_15

<!--分页 start-->
<div class="row-fluid">
      <div class="span6">
          <div class="dataInfos-info" id="dynamic-table-info">
              当前第 [[${page.current}]] 页 总计 [[${page.pages}]] 页 共[[${page.total}]]条记录
          </div>
      </div>
      <div class="span6">
          <div class="dataTables_paginate paging_bootstrap pagination">
              <ul>
                  <li class="prev"><a href="#">← Prev</a></li>
                  <!--th:class="${num == page.current ? 'active':''}" 设置当前页的页码为高亮,不是当前页则不高亮-->
                  <!--th:each="num:${#numbers.sequence(1,page.pages)} 设置分页条中显示从第一页到最后也一页-->
                  <li th:class="${num == page.current ? 'active':''}" th:each="num:${#numbers.sequence(1,page.pages)}">
                      <!--设置链接:点击分页条页码,可以直接跳到对应页码,并显示数据-->
                      <a th:href="@{/dynamic_table(pn=${num})}">[[${num}]]</a>
                  </li>
                  <li class="next"><a href="#">Next → </a></li>
              </ul>
          </div>
      </div>
  </div>
<!--分页 end-->

2.5.8、数据删除操作

contoroller接口中编写删除方法

springboot和mybatisplus版本依赖 springboot2 mybatisplus_分页_16

@Autowired
    IUserService userService;

    @GetMapping("/user/delete/{id}")
    public String deleteUser(@PathVariable("id") long id,
                             @RequestParam(value = "pn",defaultValue = "1") Integer pn,
                             RedirectAttributes ra){
        //调用userService的方法实现删除
        userService.removeById(id);
        //页面重定向时将带上请求参数pn。以实现删除该页的数据后依然留在该页
        ra.addAttribute("pn",pn);
        return "redirect:/dynamic_table";
    }

前端页面:

springboot和mybatisplus版本依赖 springboot2 mybatisplus_数据_17


如何在请求路径中带上要删除记录数据的id,可以参考thymeleaf官方文档

springboot和mybatisplus版本依赖 springboot2 mybatisplus_spring_18

3、自动配置

  • MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定。mybatis-plus:xxx 就是对mybatis-plus的定制
  • SqlSessionFactory 自动配置好。底层是容器中默认的数据源
  • mapperLocations 自动配置好的。有默认值。classpath*:/mapper/**/*.xml;任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。 建议以后sql映射文件,放在 mapper下
  • 容器中也自动配置好了 SqlSessionTemplate
  • @Mapper 标注的接口也会被自动扫描;建议直接 @MapperScan(“com.atguigu.admin.mapper”) 批量扫描就行

4、mybatis-plus优点

  • 新建mapper文件,只需要我们的Mapper继承 BaseMapper 就可以拥有crud能力