0120 springboot集成Mybatis和代碼生成器

在平常開發中,數據持久技術使用的架子使用頻率最高的有3個,即spring-jdbc , spring-jpa, spring-mybatis.詳情能夠看我以前的一篇文章spring操做數據庫的3個架子 .html

spring-jdbc封裝的比較少,須要在代碼中拼接sql,不太適合大規模的企業級別的開發。
spring-jpa封裝略多,適合開發後臺管理類的系統,能夠減小大量重複工做。java

可是在當下的互聯網大環境下,spring-mybatis既帶來了開發的便捷性,也不失靈活性,特別適合性能要求高,能夠靈活改變的場景。本篇文章大體回顧一下基於springboot的mybatis的配置開發要點以及基於maven插件的代碼自動生成。mysql

hello, springboot集成mybatis以及代碼生成器!git

springboot集成Mybatis


springboot集成Mybatis有大把的文章,不過若是撇開別人的觀點,你以爲從0開始配置,應該有哪幾個步驟呢?github

我以爲大體分爲以下幾個要點:web

  1. 引入依賴,數據庫驅動,mybatis的starter;
  2. 配置數據庫鏈接信息,鏈接池信息;
  3. 配置mybatis的核心配置信息;好比entity位置,執行器類型,xml的位置;
  4. 配置springboot的Mybatis註解,主要是開啓支持,而後是mapper的地址;
  5. 測試啓動成功:能夠放到健康檢查裏面去作;

springboot集成Mybatis的關鍵步驟:
集成完畢以後,剩下的就是使用代碼生成器,生成好常規的entity,xml,mapper, example 這些基礎代碼,而後結合業務邏輯,新增一些新的mapper的方法代碼;spring

下面跟我一塊兒來一步一步集成springboot:sql

1 依賴

使用spring initializr建立項目,引入以下依賴:數據庫

image.png

依賴說明以下:json

2 數據源配置

數據源使用springboot默認自帶的hikari數據源;
配置以下:

數據庫鏈接信息

spring.datasource.url=jdbc:mysql://10.19.174.11:3306/demo_datasource
spring.datasource.username=lxdev
spring.datasource.password=db@LX4devtmp123
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

數據鏈接池配置信息

spring.datasource.hikari.pool-name=demo_mybatis_and_plugin_pool
spring.datasource.hikari.maximum-pool-size=5
spring.datasource.hikari.allow-pool-suspension=false

3 mybatis的配置

mybatis主要是配置mapper-locations,type-alias-package,以及駝峯對應關係,執行器的類型等;

#mybatis配置
mybatis.mapper-locations=classpath:com/springbootpractice/demo/mybatis/plugin/dao/xml/*.xml
mybatis.type-aliases-package=com.springbootpractice.demo.mybatis.plugin.dao.entity
mybatis.executor-type=reuse
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.cache-enabled=true
mybatis.lazy-initialization=true

4 入口@MapperScan配置

告訴應用程序mapper接口所在的包位置,以及標識註解。

package com.springbootpractice.demo.mybatis.plugin;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Repository;

@SpringBootApplication
@MapperScan(annotationClass = Repository.class,
        basePackages = "com.springbootpractice.demo.mybatis.plugin.dao.mapper")
public class DemoMybatisAndPluginApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoMybatisAndPluginApplication.class, args);
    }

}

5 數據庫的健康檢查

首先配置好actuator,開放health端點;

#ops配置
management.endpoints.web.exposure.include=*
management.endpoints.enabled-by-default=false
management.endpoint.health.enabled=true
management.endpoint.health.show-details=always

6 檢查數據庫鏈接狀態

啓動程序, curl http://localhost:8080/actuator/health/db  能夠檢查數據庫的鏈接狀態,正常返回結果以下:

{
status: "UP",
details:- {
database: "MySQL",
result: 1,
validationQuery: "/* ping */ SELECT 1"
}
}

至此,springboot集成mybatis的步驟完成了。可是一些模板代碼,須要記憶嗎?記憶起來很痛苦應該。因此,咱們還應該配置一下mybatis的代碼生成插件,生成好一些經常使用的代碼,而後在生成的代碼的基礎上添加一些本身的持久化的mapper方法,提供給業務層調用。

代碼生成器


代碼生成器,mybatis官網有介紹。配置分爲插件配置和生成配置。本文主要經過maven的插件來進行常規的代碼生成。

官網提供的代碼生成插件介紹

插件配置

主要使用的是maven插件,配置以下:主要是須要配置生成代碼配置文件的位置;

<plugin>
       <groupId>org.mybatis.generator</groupId>
       <artifactId>mybatis-generator-maven-plugin</artifactId>
       <version>1.3.7</version>
       <configuration>
           <configurationFile>${project.basedir}/src/main/resources/generateConfig.xml</configurationFile>
           <verbose>false</verbose>
           <overwrite>true</overwrite>
       </configuration>
       <dependencies>
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>5.1.31</version>
           </dependency>
           <dependency>
               <groupId>com.itfsw</groupId>
               <artifactId>mybatis-generator-plugin</artifactId>
               <version>1.3.8</version>
           </dependency>
       </dependencies>
</plugin>

配置要點以下:

生成代碼配置

主要配置幾個生成代碼的位置,mapper,entity,example,xml,以及鏈接的數據庫的信息。而後配置了幾個我認爲很是適用的加強插件。

配置代碼以下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <properties resource="jdbc.properties"></properties>
    <context defaultModelType="flat" id="Mysql" targetRuntime="MyBatis3">
        <property name="endingDelimiter" value="`"/>
        <property name="beginningDelimiter" value="`"/>
        <property name="javaFileEncoding" value="UTF-8"/>
        <property name="autoDelimitKeywords" value="true"/>
        <!-- 自定義註釋插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.CommentPlugin">
            <!-- 自定義模板路徑 -->
            <property name="template" value="src/main/resources/comment.ftl"/>
        </plugin>
        <plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">
            <!-- @Data 默認開啓,同時插件會對子類自動附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper = true) -->
            <property name="@Data" value="true"/>
            <!-- @Builder 必須在 Lombok 版本 >= 1.18.2 的狀況下開啓,對存在繼承關係的類自動替換成@SuperBuilder -->
            <property name="@Builder" value="true"/>
            <!-- @NoArgsConstructor 和 @AllArgsConstructor 使用規則和Lombok一致 -->
            <property name="@AllArgsConstructor" value="true"/>
            <property name="@NoArgsConstructor" value="true"/>
            <!-- @Getter、@Setter、@Accessors 等使用規則參見官方文檔 -->
            <property name="@Accessors(chain = true)" value="false"/>
            <!-- 臨時解決IDEA工具對@SuperBuilder的不支持問題,開啓後(默認未開啓)插件在遇到@SuperBuilder註解時會調用ModelBuilderPlugin來生成相應的builder代碼 -->
            <property name="supportSuperBuilderForIdea" value="false"/>
        </plugin>
        <!-- Mapper註解插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.MapperAnnotationPlugin">
            <!-- @Mapper 默認開啓 -->
            <property name="@Mapper" value="false"/>
            <!-- @Repository 默認關閉,開啓後解決IDEA工具@Autowired報錯 -->
            <property name="@Repository" value="true"/>
        </plugin>
        <!-- MySQL分頁插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin">
            <!-- 經過配置startPage影響Example中的page方法開始分頁的頁碼,默認分頁從0開始 -->
            <property name="startPage" value="1"/>
        </plugin>
        <plugin type="com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin">
            <!-- 修改Example類生成到目標包下 -->
            <property name="targetPackage" value="${code.base.package}.example"/>
        </plugin>
        <!-- 狀態枚舉生成插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.EnumTypeStatusPlugin">
            <!-- 是否開啓自動掃描根據約定註釋格式生成枚舉,默認true  註釋[success(0):成功, fail(1):失敗]-->
            <property name="autoScan" value="true"/>
        </plugin>
        <!-- 邏輯刪除插件 -->
        <plugin type="com.itfsw.mybatis.generator.plugins.LogicalDeletePlugin">
            <!-- 這裏配置的是全局邏輯刪除列和邏輯刪除值,固然在table中配置的值會覆蓋該全局配置 -->
            <!-- 邏輯刪除列類型只能爲數字、字符串或者布爾類型 -->
            <property name="logicalDeleteColumn" value="deleted"/>
            <!-- 邏輯刪除-已刪除值 -->
            <property name="logicalDeleteValue" value="1"/>
            <!-- 邏輯刪除-未刪除值 -->
            <property name="logicalUnDeleteValue" value="0"/>
            <!-- 是否生成邏輯刪除常量(只有開啓時 logicalDeleteConstName、logicalUnDeleteConstName 才生效) -->
            <property name="enableLogicalDeleteConst" value="true"/>
            <!-- 邏輯刪除常量名稱,不配置默認爲 IS_DELETED -->
            <property name="logicalDeleteConstName" value="IS_DELETED"/>
            <!-- 邏輯刪除常量(未刪除)名稱,不配置默認爲 NOT_DELETED -->
            <property name="logicalUnDeleteConstName" value="NOT_DELETED"/>
        </plugin>
        <jdbcConnection connectionURL="${spring.datasource.url}" driverClass="${spring.datasource.driver-class-name}"
                        password="${spring.datasource.password}" userId="${spring.datasource.username}"/>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="true"/>
            <property name="useJSR310Types" value="true"/>
        </javaTypeResolver>
        <javaModelGenerator targetPackage="${code.base.package}.entity"
                            targetProject="src/main/java">
            <property name="trimStrings" value="true"/>
            <property name="enableSubPackages" value="true"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="${code.base.package}.xml" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <javaClientGenerator targetPackage="${code.base.package}.mapper"
                             targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <table domainObjectName="UserLoginExtEntity" tableName="user_login_ext"
               enableDeleteByExample="false" enableDeleteByPrimaryKey="false">
            <generatedKey column="id" identity="true" sqlStatement="MySql"/>
        </table>
    </context>
</generatorConfiguration>

此外,還把兩個信息配置外部化了。
jdbc.properties : 主要配置數據鏈接信息,父包名;

spring.datasource.url=jdbc:mysql://10.19.174.11:3306/demo_datasource
spring.datasource.username=lxdev
spring.datasource.password=db@LX4devtmp123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
code.base.package=com.springbootpractice.demo.mybatis.plugin.dao

comment.ftl 配置了註釋生成的格式;

<?xml version="1.0" encoding="UTF-8"?>
<template>
    <comment ID="addJavaFileComment"></comment>
    <comment ID="addComment"></comment>
    <comment ID="addRootComment"></comment>
    <comment ID="addFieldComment"><![CDATA[
        <#if introspectedColumn??>
            /**
            <#if introspectedColumn.remarks?? && introspectedColumn.remarks != ''>
                <#list introspectedColumn.remarks?split("\n") as remark>
* ${remark}  對應數據庫表字段: ${introspectedTable.fullyQualifiedTable}.${introspectedColumn.actualColumnName}
                </#list>
            </#if>
*/
        <#else>
        </#if>
        ]]></comment>
    <comment ID="addModelClassComment"><![CDATA[
/**
* @author: carter
* 對應數據庫表: ${introspectedTable.fullyQualifiedTable}
*/
        ]]></comment>
    <comment ID="addClassComment"></comment>
    <comment ID="addEnumComment"></comment>
    <comment ID="addInterfaceComment"></comment>
    <comment ID="addGetterComment"></comment>
    <comment ID="addSetterComment"></comment>
    <comment ID="addGeneralMethodComment"></comment>
</template>

**

小結


經過本篇文章你能夠學到以下內容:

  1. 0基礎爲你的springboot應用集成mybatis;
  2. 配置mybatis的代碼生成器插件,並用於生成代碼,提升工做效率;

代碼獲取點我!

springboot集成mybatis,配置好代碼生成插件以後,就能夠有大把時間專一於業務邏輯的開發,快速的完成研發工做,有大把的時間下班回去陪娃了。該demo能夠用於生產環境,通過產品試驗。放心使用,拿走不謝!

無論你有沒有收穫,美女仍是要送的,最近在追劇,猜猜看這個美女是誰?雞腿仙女送給你。
image.png

原創不易,轉載請註明出處。

相關文章
相關標籤/搜索