前言

有了前面自动配置数据源、JDBC与MyBatis的基础后,自动配置MyBatis就很简单了。

注:在说明注解时,第一点加粗为注解中文含义,第二点为一般加在哪身上,缩进或代码块为示例,如:

@注解

  • 中文含义
  • 加在哪
  • 其他……
    • 语句示例
    1. //代码示例

1. 什么是MyBatis-Plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

它提供两大接口BaseMapper<T>IService<T>,方便我们操作数据库与业务。

1.1 BaseMapper<T>接口

可以令XXXMapper接口继承基类BaseMapper<T>,BaseMapper里实现了一些方法方便我们操作数据库:

  • XXXMapper继承该接口后,无需编写mapper.xml文件,即可进行crud操作;

1.2 IService<T>接口

同理对于service有顶层接口IService<T>

2. 整合MyBatis-Plus以及CRUD功能

直接导入场景依赖即可。

2.1 导入场景依赖

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>3.4.1</version>
  5. </dependency>

引入mybatis-plus-boot-starter后,其帮我们引入了mybatis-plus扩展包与核心包(核心包里引入了mybatis核心包、mybatis与spring整合的包)、starter-jdbc。

2.2 CRUD功能

Mybatis里对service层设有顶层接口IService<T>;而对IService<T>有实现类ServiceImpl<操作的基本表,返回类型>

在Bean类里

@TableName("数据库名")

  • 数据库表名
  • 标注在bean包下的类里;
  • mybatis-plus默认识别数据库表名与类名相同的属性进行绑定,当名字不同时,需要在bean包下的对应类上标注@TableName("数据库名");
  • 当名字相同时可以不标注。

在Service层里

  1. public interface UserService extends IService<User> {
  2. }
  1. @Service
  2. public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
  3. }

3. Mabatis-plus实现分页功能

续上面Service层里的配置。

要实现分页功能首先要导入分页插件

  • 在config包下,注意版本;
  1. @Configuration
  2. public class MyBatisConfig {
  3. /**
  4. * MybatisPlusInterceptor
  5. * @return
  6. */
  7. @Bean
  8. public MybatisPlusInterceptor paginationInterceptor() {
  9. MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
  10. //这是分页拦截器
  11. PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
  12. // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
  13. paginationInnerInterceptor.setOverflow(true);
  14. // 设置最大单页限制数量,默认 500 条,-1 不受限制
  15. paginationInnerInterceptor.setMaxLimit(500L);
  16. mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
  17. return mybatisPlusInterceptor;
  18. }
  19. }

在controller类里(分页功能)

  1. @Controller
  2. public class TableController {
  3. @Autowired
  4. UserService userService;
  5. //删除用户
  6. @GetMapping("/user/delete/{id}")
  7. public String deleteUser(@PathVariable("id") Long id,
  8. @RequestParam(value = "pn",defaultValue = "1")Integer pn,
  9. RedirectAttributes ra){
  10. userService.removeById(id);
  11. //重定向回到当前页码
  12. ra.addAttribute("pn",pn);
  13. //重定向
  14. return "redirect:/dynamic_table";
  15. }
  16. //请求参数pn表示跳转到的页数,并设置默认值为1
  17. @GetMapping("/dynamic_table")
  18. public String dynamic_table(@RequestParam(value="pn",defaultValue = "1") Integer pn,Model model){
  19. //构造分页参数
  20. Page<User> page = new Page<>(pn, 2);
  21. //调用page进行分页,返回page类型结果
  22. Page<User> userPage = userService.page(page, null);
  23. // userPage.getRecords()
  24. // userPage.getCurrent()
  25. // userPage.getPages()
  26. //将page设置进model属性里
  27. model.addAttribute("users",userPage);
  28. return "table/dynamic_table";
  29. }
  30. @GetMapping("/responsive_table")
  31. public String responsive_table(){
  32. return "table/responsive_table";
  33. }
  34. @GetMapping("/editable_table")
  35. public String editable_table(){
  36. return "table/editable_table";
  37. }
  38. }

在HTML里(分页功能)

  • users.current:表示当前页数
  • users.pages:总页数
  • users.total:总记录数
  1. <div class="adv-table">
  2. <table class="display table table-bordered table-striped" id="dynamic-table">
  3. <thead>
  4. <tr>
  5. <th>#</th>
  6. <th>name</th>
  7. <th>age</th>
  8. <th>email</th>
  9. <th>操作</th>
  10. </tr>
  11. </thead>
  12. <tbody>
  13. <tr class="gradeX" th:each="user: ${users.records}">
  14. <td th:text="${user.id}"></td>
  15. <td>[[${user.name}]]</td>
  16. <td th:text="${user.age}">Win 95+</td>
  17. <td th:text="${user.email}">4</td>
  18. <td>
  19. <a th:href="@{/user/delete/{id}(id=${user.id},pn=${users.current})}" class="btn btn-danger btn-sm" type="button">删除</a>
  20. </td>
  21. </tr>
  22. </tfoot>
  23. </table>
  24. <div class="row-fluid">
  25. <div class="span6">
  26. <div class="dataTables_info" id="dynamic-table_info">
  27. 当前第[[${users.current}]]页 总计 [[${users.pages}]]页 共[[${users.total}]]条记录
  28. </div>
  29. </div>
  30. <div class="span6">
  31. <div class="dataTables_paginate paging_bootstrap pagination">
  32. <ul>
  33. <li class="prev disabled"><a href="#">← 前一页</a></li>
  34. <li th:class="${num == users.current?'active':''}" th:each="num:${#numbers.sequence(1,users.pages)}" >
  35. <a th:href="@{/dynamic_table(pn=${num})}">[[${num}]]</a>
  36. </li>
  37. <li class="next disabled"><a href="#">下一页 → </a></li>
  38. </ul>
  39. </div>
  40. </div>
  41. </div>
  42. </div>

4. *MyBatis-Plus自动配置源码分析

源码分析,跟前面文章类似,这里不做过多解释。

  • 引入mybatis-plus-boot-starter后,首先找到META-INF包下的spring.factories工厂,通过读取EnableAutoConfiguration获取启动时加载的类 :MybatisPlusAutoConfiguration配置类;进而找到配置项 MybatisPlusProperties
  • 通过自动配置项得知:通过mybatis-plus:xxx对mybatis-plus进行定制;
  • 通过自动配置类得知:给我们自动配置好了哪些组件:
    • SqlSessionFactory自动配置好:使用配置过的数据源dataSource,配置MyBatis的全局配置文件configLocation;
    • mapperLocations自动配置好:有默认值 classpath*:/mapper/**/*.xml,即:任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。 建议以后sql映射文件,放在mapper路径下。
    • SqlSessionTemplate自动配置好
    • MapperScannerRegistrarNotFoundConfiguration自动配置好: @Mapper 标注的接口也会被自动扫描;可以直接@MapperScan("com.atguigu.admin.mapper") 批量扫描就行

最后

新人制作,如有错误,欢迎指出,感激不尽!
欢迎关注公众号,会分享一些更日常的东西!
如需转载,请标注出处!

SpringBoot | 3.3 整合MyBatis-Plus的更多相关文章

  1. SpringBoot 2.X整合Mybatis

    1.创建工程环境 勾选Web.Mybatis.MySQL,如下 依赖如下 <dependency> <groupId>org.springframework.boot</ ...

  2. 【springboot spring mybatis】看我怎么将springboot与spring整合mybatis与druid数据源

    目录 概述 1.mybatis 2.druid 壹:spring整合 2.jdbc.properties 3.mybatis-config.xml 二:java代码 1.mapper 2.servic ...

  3. SpringBoot当中如何整合mybatis和注入

    [学习笔记] 6.整合mybatis和注入: 马克-to-win@马克java社区: 根据第3部分的helloworld例子,用那个项目做底子.pom.xml只需要加入mybatis和mysql的部分 ...

  4. springboot笔记07——整合MyBatis

    前言 Springboot 整合 MyBatis 有两种方式,分别是:"全注解版" 和 "注解.xml混合版". 创建项目 创建Springboot项目,选择依 ...

  5. springboot学习2 整合mybatis

    springboot整合mybatis 一.添加mybatis和数据库连接的依赖 <!--整合mybatis--> <dependency> <groupId>or ...

  6. SpringBoot学习之整合Mybatis

    本博客使用IDEA开发工具,通过Maven构建SpringBoot项目,初始化项目添加的依赖有:spring-boot-starter-jdbc.spring-boot-starter-web.mys ...

  7. SpringBoot | 3.2 整合MyBatis

    目录 前言 1. 导入MyBatis场景 1.1 初始化导向 1.2 手动导入 2. *MyBatis自动配置原理 3. 全局配置文件 @Mapper @MapperScan 3.1 配置模式 3.2 ...

  8. 利用IDEA搭建SpringBoot项目,整合mybatis

    一.配置文件.启动项目 生成之后这几个文件可以删掉的 配置application spring.datasource.url=jdbc:mysql://localhost:3306/test?serv ...

  9. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  10. SpringBoot学习:整合Mybatis,使用HikariCP超高性能数据源

    一.添加pom依赖jar包: <!--整合mybatis--> <dependency> <groupId>org.mybatis.spring.boot</ ...

随机推荐

  1. 3、dns服务搭建

    3.1.dns服务简介: 1.DNS(Domain Name System)域名系统. 目前提供网络服务的应用使用唯一的32位的IP地址来标识,但是由于数字比较复杂.难以记忆,因此产生了域名系统(DN ...

  2. POJ 3126 Prime Path 简单广搜(BFS)

    题意:一个四位数的质数,每次只能变换一个数字,而且变换后的数也要为质数.给出两个四位数的质数,输出第一个数变换为第二个数的最少步骤. 利用广搜就能很快解决问题了.还有一个要注意的地方,千位要大于0.例 ...

  3. 【译】GO语言:管理多个错误

    原文:https://medium.com/a-journey-with-go/go-multiple-errors-management-a67477628cf1 ​ 关于开发者使用Go遇到的最大挑 ...

  4. AcWing 99. 激光炸弹

    地图上有n个目标,用整数x,y表示目标在地图上的位置,每个目标都有一个价值Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含r个位置的正方形内的所有目标. 激光炸弹的投 ...

  5. 并发王者课-铂金10:能工巧匠-ThreadLocal如何为线程打造私有数据空间

    欢迎来到<并发王者课>,本文是该系列文章中的第23篇,铂金中的第10篇. 说起ThreadLocal,相信你对它的名字一定不陌生.在并发编程中,它有着较高的出场率,并且也是面试中的高频面试 ...

  6. CentOS-Docker搭建Kafka(单点,含:zookeeper、kafka-manager)

    Docker搭建Kafka(单点,含:zookeeper.kafka-manager) 下载相关容器 $ docker pull wurstmeister/zookeeper $ docker pul ...

  7. Mysql/Oracle/达梦中数据字典表

    在mysql中,数据字典表存放在information_schema库中,,对应的两张表,分别是TABLES,和COLUMNS. 在oracle中有表空间(即用户空间或者库)和模式的概念.模式和表空间 ...

  8. 《快来为你的 .NET 应用加个监控吧!》更新版本啦

    目录 导读 三种方式处理监控数据 主动推送 ASP.NET Core 自定义URL .NET diagnostics 自定义监控指标 导读 CZGL.ProcessMetrics 是一个 Metric ...

  9. Linux云计算-07_Linux文件服务器之vsftpd服务器

    本章向读者介绍企业vsftpd服务器实战.匿名用户访问.系统用户访问及虚拟用户实战等. 1 vsftpd服务器企业实战 文件传输协议(File Transfer Protocol,FTP),基于该协议 ...

  10. 团队开发day06

    实现功能,通过连接,获取到品牌商存入数据库的数据, 将数据返回到list集合,展示在安卓前端 出现问题:servlet响应请求返回数据格式出错,利用gson类将java类 转化为jsonobject对 ...