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

簡介

Mybatis-Plus是在Mybatis的基礎上,國人開發的一款持久層框架。html

而且榮獲了2018年度開源中國最受歡迎的中國軟件TOP5java

一樣以簡化開發爲宗旨的Spring BootMybatis-Plus放在一塊兒會產生什麼樣的化學反應呢?下面咱們來領略一下二者配合帶來的效率上的提高。mysql

Mybatis-Plus的做用

能夠看到,它給咱們提供了一些核心的功能:代碼生成器和現成的CRUD接口以及能夠結合Lambda的條件構造器使咱們的代碼變得足夠優雅,分頁的使用也是至關的方便,以及提供了不一樣的主鍵生成策略。
若是這些功能不能知足咱們的需求,Mybatis-Plus還提供了豐富的插件供咱們去使用,咱們接下來只講核心功能,插件的使用會在後面的文章中進行部分的講解,感興趣的同窗能夠先去看一下官方的文檔git

使用第一步:引入POM

首先咱們須要引入POM,我在這裏引用的是最新版本的:github

接着,若是咱們須要使用代碼生成器,須要引入模板引擎的依賴:sql

到此,pom的引入就告一段落,下面咱們來看一下配置文件的編寫:api

使用第二步:編寫配置文件

這裏咱們使用的是application.yml做爲配置文件,而非新建Spring Boot項目默認的application.properties,這裏若是不會新建一個Spring Boot項目,能夠去參考本系列教程的第一篇文章mybatis

在這裏能夠進行打印SQL的配置,便於咱們進行排查問題。app

使用第三步:建表

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

直接貼出個人代碼生成器代碼:框架

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)上進行下載,後續的例子都會同步更新。

公衆號

相關文章
相關標籤/搜索