Spring Boot 2.x(五):整合Mybatis-Plus

简介

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

clipboard.png

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

clipboard.png

一样以简化开发为宗旨的Spring BootMybatis-Plus放在一块儿会产生什么样的化学反应呢?下面咱们来领略一下二者配合带来的效率上的提高。mysql

Mybatis-Plus的做用

clipboard.png

能够看到,它给咱们提供了一些核心的功能:代码生成器和现成的CRUD接口以及能够结合Lambda的条件构造器使咱们的代码变得足够优雅,分页的使用也是至关的方便,以及提供了不一样的主键生成策略。
若是这些功能不能知足咱们的需求,Mybatis-Plus还提供了丰富的插件供咱们去使用,咱们接下来只讲核心功能,插件的使用会在后面的文章中进行部分的讲解,感兴趣的同窗能够先去看一下官方的文档git

使用第一步:引入POM

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

clipboard.png

接着,若是咱们须要使用代码生成器,须要引入模板引擎的依赖:sql

clipboard.png

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

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

这里咱们使用的是application.yml做为配置文件,而非新建Spring Boot 项目默认的application.properties,这里若是不会新建一个Spring Boot项目,能够去参考本系列教程的第一篇文章mybatis

clipboard.png

在这里能够进行打印SQL的配置,便于咱们进行排查问题。app

使用第三步:建表

clipboard.png

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

直接贴出个人代码生成器代码:框架

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方法,就能够看到生成的包:

clipboard.png

mapper包下面xml包删掉,由于咱们已经在resources中生成了*mapper.xml文件。
这里须要注意,须要在SpringBoot的启动类上配置MapperScan来帮助咱们去找到持久层接口的位置。

clipboard.png

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

clipboard.png

没错,咱们只须要写一行代码就能够获取到咱们想要的列表,下面咱们来访问一下

clipboard.png

IService与BaseMapper

有些人可能会好奇,为何咱们只须要在controller层中直接去调用就能够得到到列表,这是由于Mybatis-Plus给咱们封装了一系列的CRUD的基础接口,在经过代码生成器生成的UserService接口其实是继承了IService接口的,而UserServiceImpl则是继承ServiceImpl,因此就能够获取到一些基础的实现。

clipboard.png

clipboard.png

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

clipboard.png

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

clipboard.png

经过这些基础的实现,咱们能够完成平常中大部分的基础查询,而省去了编写Service和ServiceImpl的时间,从编码效率上来说比起JPA更胜一筹。

条件构造器

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

clipboard.png

clipboard.png

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

clipboard.png

固然,条件构造器的用法还有许许多多,这里就不在一一罗列,有须要的同窗能够去官网查看文档

分页查询

若是咱们须要分页查询数据去渲染表格,可使用Mybatis-Plus自带的分页插件:

clipboard.png

在启动类中加入上面的代码,而后咱们就能够去使用分页了:

clipboard.png

咱们只须要构建一个Page对象,并初始化咱们所需的页数(page)和每页数据量(pageSize),而后将其做为page()方法的参数传入便可
下面,咱们来访问一下:

clipboard.png

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

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

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

公众号

clipboard.png

相关文章
相关标签/搜索