简介

Mybatis-Plus是在Mybatis的基础上,国人开发的一款持久层框架。

并且荣获了2018年度开源中国最受欢迎的中国软件TOP5

同样以简化开发为宗旨的Spring BootMybatis-Plus放在一起会产生什么样的化学反应呢?下面我们来领略一下两者配合带来的效率上的提升。

Mybatis-Plus的作用

可以看到,它给我们提供了一些核心的功能:代码生成器和现成的CRUD接口以及可以结合Lambda的条件构造器使我们的代码变得足够优雅,分页的使用也是相当的方便,以及提供了不同的主键生成策略。

如果这些功能不能满足我们的需求,Mybatis-Plus还提供了丰富的插件供我们去使用,我们接下来只讲核心功能,插件的使用会在后面的文章中进行部分的讲解,感兴趣的同学可以先去看一下官方的文档

使用第一步:引入POM

首先我们需要引入POM,我在这里引用的是最新版本的:

接着,如果我们需要使用代码生成器,需要引入模板引擎的依赖:

到此,pom的引入就告一段落,下面我们来看一下配置文件的编写:

使用第二步:编写配置文件

这里我们使用的是application.yml作为配置文件,而非新建Spring Boot 项目默认的application.properties,这里如果不会新建一个Spring Boot项目,可以去参考本系列教程的第一篇文章

在这里可以进行打印SQL的配置,便于我们进行排查问题。

使用第三步:建表

使用第四步:使用代码生成器

直接贴出我的代码生成器代码:

public class MpGenerator {
public static void main(String[] args) {
GlobalConfig config = new GlobalConfig();
String dbUrl = "jdbc:mysql://localhost:3306/viboot?useSSL=false";
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)
.setUrl(dbUrl)
.setUsername("root")
.setPassword("Passw0rd")
.setDriverName("com.mysql.cj.jdbc.Driver");
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig
.setCapitalMode(true)
//这里结合了Lombok,所以设置为true,如果没有集成Lombok,可以设置为false
.setEntityLombokModel(true)
.setNaming(NamingStrategy.underline_to_camel);
//这里因为我是多模块项目,所以需要加上子模块的名称,以便直接生成到该目录下,如果是单模块项目,可以将后面的去掉
String projectPath = System.getProperty("user.dir") + "/viboot-mybatis-plus";
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
// String templatePath = "/templates/mapper.xml.vm"; // 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名
return projectPath + "/src/main/resources/mapper/" + "user"
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
}); cfg.setFileOutConfigList(focList); //设置作者,输出路径,是否重写等属性
config.setActiveRecord(false)
.setEnableCache(false)
.setAuthor("viyoung")
.setOutputDir(projectPath + "/src/main/java")
.setFileOverride(true)
.setServiceName("%sService");
new AutoGenerator()
.setGlobalConfig(config)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setTemplateEngine(new FreemarkerTemplateEngine())
.setCfg(cfg)
//这里进行包名的设置
.setPackageInfo(
new PackageConfig()
.setParent("indi.viyoung.viboot.mybatis")
.setController("controller")
.setEntity("entity")
.setMapper("mapper")
.setServiceImpl("service.impl")
.setService("service")
).execute();
}
}

下面我们来运行main方法,就可以看到生成的包:

mapper包下面xml包删掉,因为我们已经在resources中生成了*mapper.xml文件。

这里需要注意,需要在SpringBoot的启动类上配置MapperScan来帮助我们去找到持久层接口的位置。

使用第四步:编写查询列表进行测试

没错,我们只需要写一行代码就可以获取到我们想要的列表,下面我们来访问一下

IService与BaseMapper

有些人可能会好奇,为什么我们只需要在controller层中直接去调用就可以获得到列表,这是因为Mybatis-Plus给我们封装了一系列的CRUD的基础接口,在通过代码生成器生成的UserService接口实际上是继承了IService接口的,而UserServiceImpl则是继承ServiceImpl,所以就可以获取到一些基础的实现。

IService则给我们提供了以下方法来实现基础的CRUD:

同样的,BaseMapper接口也提供了一些实现:

通过这些基础的实现,我们可以完成日常中大部分的基础查询,而省去了编写Service和ServiceImpl的时间,从编码效率上来讲比起JPA更胜一筹。

条件构造器

条件构造器可以构造一些查询条件来获取我们指定的值,同时可以结合Lambda表达式来使用,下面我们直接来编写两个例子:

可以看到,被注释掉的部分是不使用Lambda表达式的写法,这样的写法存在魔法值,而且会由于粗心写错column的名称而导致错误,但是使用Lambda表达式就足够直观的可以看出我们是想查询出userName = ?的数据,下面,我们来运行一下,看看结果是否符合我们预期的那样

当然,条件构造器的用法还有许许多多,这里就不在一一罗列,有需要的同学可以去官网查看文档

分页查询

如果我们需要分页查询数据去渲染表格,可以使用Mybatis-Plus自带的分页插件:

在启动类中加入上面的代码,然后我们就可以去使用分页了:

我们只需要构建一个Page对象,并初始化我们所需的页数(page)和每页数据量(pageSize),然后将其作为page()方法的参数传入即可

下面,我们来访问一下:

至此,我们的Mybatis-Plus就告一段落了,谢谢您的耐心阅读,希望您有所收获~

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

源码可以去github(https://github.com/viyog/viboot/)或者码云(https://gitee.com/yw18530069930/viboot)上进行下载,后续的例子都会同步更新。

公众号

Spring Boot 2.x(五):整合Mybatis-Plus的更多相关文章

  1. Spring Boot学习笔记(五)整合mybatis

    pom文件里添加依赖 <!-- 数据库需要的依赖 --> <dependency> <groupId>org.mybatis.spring.boot</gro ...

  2. Spring Boot 2.X(五):MyBatis 多数据源配置

    前言 MyBatis 多数据源配置,最近在项目建设中,需要在原有系统上扩展一个新的业务模块,特意将数据库分库,以便减少复杂度.本文直接以简单的代码示例,如何对 MyBatis 多数据源配置. 准备 创 ...

  3. Spring Boot 知识笔记(整合Mybatis)

    一.pom.xml中添加相关依赖 <!-- 引入starter--> <dependency> <groupId>org.mybatis.spring.boot&l ...

  4. Spring Boot框架 - 数据访问 - 整合Mybatis

    一.新建Spring Boot项目 注意:创建的时候勾选Mybatis依赖,pom文件如下 <dependency> <groupId>org.mybatis.spring.b ...

  5. spring boot(二)整合mybatis plus+ 分页插件 + 代码生成

    先创建spring boot项目,不知道怎么创建项目的 可以看我上一篇文章 用到的环境 JDK8 .maven.lombok.mysql 5.7 swagger 是为了方便接口测试 一.Spring ...

  6. Spring Boot数据访问之整合Mybatis

    在Mybatis整合Spring - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中谈到了Spring和Mybatis整合需要整合的点在哪些方面,需要将Mybatis中数据库连接池等相关对 ...

  7. [Spring] 学习Spring Boot之二:整合MyBatis并使用@Trasactional管理事务

    一.配置及准备工作 1.在 Maven 的 pom 文件中新增以下依赖: <dependency> <groupId>mysql</groupId> <art ...

  8. Spring Boot 知识笔记(整合Mybatis续-补充增删改查)

    续上篇,补充数据库增删改查的其他场景. 一.Mapper中添加其他场景操作 package net.Eleven.demo.Mapper; import net.Eleven.demo.domain. ...

  9. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  10. Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 本篇博客我们讲解下在Spring Boot中使用MyBatis访问MySql数据库的简单用法. 1.前期 ...

随机推荐

  1. 微信跳转技术,浏览器唤起微信,weixin://dl/business/?ticket=

    weixin://dl/business/?ticket=  到底怎么生成的?调用以下接口 weixin://dl/scan 扫一扫weixin://dl/feedback 反馈weixin://dl ...

  2. 快速幂 ,快速幂优化,矩形快速幂(java)

    快速幂形式 public static int f(int a,int b,int c){ int ans =1; int base=a; while(b!=0){ if((b&1)!=0) ...

  3. oracle基础语句练习

    1. 创建相关表结构 Emp----员工信息表 Ename ), --姓名 Empno ), --编号 Deptno ), --所在部门 Job ), --工种(人员类别),如:manager 经理, ...

  4. JUnit介绍(转)

    测试的重要性毋庸再说,但如何使测试更加准确和全面,并且独立于项目之外并且避免硬编码,JUnit给了我们一个很好的解决方案.一.引子    首先假设有一个项目类SimpleObject如下:    pu ...

  5. cadence原理图设计

  6. COCOMOII的使用说明

    if(airline.equals("欧美")) { result="所有座位都有食物供应,每个座位都可以播放电影"; } if(airline.equals( ...

  7. [Swift]LeetCode388. 文件的最长绝对路径 | Longest Absolute File Path

    Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...

  8. [Swift]LeetCode600. 不含连续1的非负整数 | Non-negative Integers without Consecutive Ones

    Given a positive integer n, find the number of non-negativeintegers less than or equal to n, whose b ...

  9. [Swift]LeetCode970.强整数 | Powerful Integers

    Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j for some ...

  10. PHP算法之斐波那契数列(递归)

    /*斐波那契数列 源代码分析 f(x) = 1 ; 当 x < 2 ; f(x) = f(x-1)+f(x-2); 当 x >= 2 ; 通项式为:fn ={((1+根号5)/2)^n-( ...