简介

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. 自制vbs消息轰炸机

    自制消息轰炸机 目标 做一个简单的,可以自己输入参数的vbs程序 准备 电脑qq 脚本设计成了可以指定发给某个好友轰炸的形式,在写好以后容错性比较强,但这意味着你想换人的话,需要重新改代码 vbs脚本 ...

  2. Helm 入门指南

    Helm 为Kubernetes的软件包管理工具,Helm有两部分组成:Helm客户端.Tiller服务端,Helm三个主要部件:Chart.仓库.Release: Chart:为Kubernetes ...

  3. Linux 搭建 Nginx+PHP-FPM环境

    安装PHP.Nginx和PHP-FPM sudo apt-get install php sudo apt-get install nginx sudo apt-get install php7-fp ...

  4. springmvc的日期类型转换

      springmvc的日期类型转换 # spring mvc绑定参数之类型转换有三种方式: ## 1.实体类中加日期格式化注解 @DateTimeFormat(pattern="yyyy- ...

  5. Python函数式编程之lambda表达式

    一:匿名函数的定义 lambda parameter_list: expression 二:三元表达式 条件为真时返回的结果 if 条件判断 else 条件为假的时候返回的结果 三:map map(f ...

  6. python print 中文重定向失败

    一直以来认为解决python字符集编码,不一定需要通过sys.setdefaultencoding.因为既然python实现过程中,默认禁用了该操作,说明是不推荐的. 通过不断的字符转换,也cover ...

  7. History of program (language).

    1 编程语言的发展历程及未来趋势 1.1 编程语言的发展 · 1946 Plankalkul     Konrad Zuse,一位德国工程师,他躲藏在巴伐利亚附近的阿尔卑斯山上时,独立开发了Plank ...

  8. three.js的wave特效(ivew官网首页波浪特效实现)

    查看效果请访问:https://521lbx.github.io/Web3D/index.html公司的好几个vue项目都是用ivew作为UI框架,所以ivew官网时不时就得逛一圈.每一次进首页都会被 ...

  9. js中的单例模式

    1.场景:当我们需要多人合作完成一个项目,但是有一些操作是同样的操作时(例如:点击按钮显示加载的遮罩层:例如:提交表单时的验证都是一样的),这个时候我们就需要单例模式: 2.什么是单例模式:是一种常见 ...

  10. 【转载】C++ ,C#数据类型对照

    C++            C#=====================================WORD            ushortDWORD            uintUCH ...