0120 springboot MyBatisの統合とコードジェネレータ

日々の開発では、棚のデータ永続化技術は、ばね、JDBC、春-JPA、という3があり、最も頻繁に使用されるばねでMyBatisのは。 詳細については、私の以前の記事を参照してくださいデータベースの3つの棚バネ操作は  。

ばねJDBCパッケージは比較的小さく、それは必要スプライシングSQLコード、大規模な企業レベルの開発には適していません。
多くの作業を減らすことができ、バックグラウンドクラス管理システムの開発に適しもう少し春-JPAパッケージは、繰り返されます。

しかし、現在のインターネット環境では、だけでなく、特に高パフォーマンス要件、シーンを変更するための柔軟性のために、開発に利便性をもたらすだけでなく、柔軟性を失うことなく、スプリングは、MyBatisの。この記事では、一般的に自動生成されたポイントMyBatisののspringbootとの構成に基づいて、コードベースのMavenプラグインの開発を見てください。

こんにちは、springbootは統合とコードジェネレータをMyBatisの!

springboot統合MyBatisの

springboot統合MyBatisのは、記事の多くを持っていますが、ビューの他の誰かのポイントを見ていない、あなたはそれを持っているべき手順、0設定から始まると思いますか?

私は、大まかに以下の点に分かれ思います:

1.依存導入、データベースドリブン、MyBatisのスターター。

設定データベース接続情報、接続プール情報。

1.構成は、コア構成情報をMyBatisの;そのような位置は、アクチュエータのタイプ、XMLなどのエンティティの場所

MyBatisのノート、ほとんどがオープンサポート、そしてマッパアドレスの設定1.のspringboot。

1. [スタートが成功したテスト:ヘルスチェックを行うための内部を配置することができます。

springbootはMyBatisの重要なステップを統合:統合が完了した後、コードジェネレータの残りの部分は、新しいメソッドのコードマッパーを追加するために、良い定期的なエンティティ、XML、マッパー、例えば、これらの基本的なコードを生成するために使用し、サービスのロジックを組み合わせています。

ここで一緒に私と一緒にステップ統合springbootバイステップ:

依存1

以下の導入に依存して、春のinitializrを使用してプロジェクトを作成します。

image.png

次のように依存します:

データ・ソース構成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の。

#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

マッパーインターフェースは、コメントを特定のアプリケーションに伝えるために場所をパッケージ。

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データベースのヘルスチェック

まず、アクチュエータ、オープン健康エンドポイントを設定しました。

#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のコード生成プラグインで一般的に使用されるコードの良い番号を生成し、サービス層の呼び出しで提供生成されたコードをもとに、独自の永続マッパー方法のいくつかを追加します。

コードジェネレータ

コードジェネレータ、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>复制代码

次のようにコンフィギュレーション・ポイントは以下のとおりです。

生成コードの設定

いくつかの主要な構成コード生成された位置情報マッパー、エンティティ、例えば、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>
复制代码

さらに、2つは、構成情報を外部。
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. あなたのspringbootアプリケーションの0 MyBatisの統合基盤。
  2. MyBatisのプラグ構成コードジェネレータと、コードを生成するため、作業効率を向上させます。

私は、コード・ポイントを得ます!

あなたは、ビジネス・ロジック、開発作業を迅速に完了の開発に注力して多くの時間を持つことができ、プラグインspringboot統合MyBatisのは、configureコード生成後、赤ちゃんと一緒に戻って作業をオフに多くの時間を持っています。デモは、製品のテストを通じて、本番環境で使用することができます。使いやすさ、離れてそれを言及しないでください!

あなたは何のゲインを持っていない、または美しい送信するかどうか、最近のチェイスドラマの中で、この美しさが誰であるかを推測?あなたのためのチキン妖精。
image.png

元は容易ではない、ソースを明記してください。

おすすめ

転載: juejin.im/post/5e257296e51d4530e60e4725