Mall项目整合MyBatis|Swagger-UI|pageHelper|MGB(代码生成器)实现增删改查的笔记

Mall项目整合MyBatis|Swagger-UI|pageHelper|MGB(代码生成器)实现增删改查的笔记

1、使用SpringBoot

SpringBoot是一个大的依赖管理,他主动的去整合了其他厉害的框架,解决了jar间不兼容出现冲突的问题,并且有自动装配的特性,很多东西不要我们去配置了,他提供了默认的方案,如需个人修改,在他对外暴露的application.yaml中简单修改即可!

1.1、Maven配置


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.1.3.RELEASEversion>
        <relativePath/>
    parent>

    <groupId>com.examplegroupId>
    <artifactId>mall_01artifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>mall_01name>
    <description>mall_01description>

    <properties>
        <java.version>1.8java.version>
        <pagehelper-version>1.2.10pagehelper-version>
        <druid-version>1.1.10druid-version>
        <mybatis-generator-version>1.3.3mybatis-generator-version>
        <mysql-version>8.0.27mysql-version>
        <swagger-version>2.7.0swagger-version>
    properties>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-aopartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
        
        <dependency>
            <groupId>com.github.pagehelpergroupId>
            <artifactId>pagehelper-spring-boot-starterartifactId>
            <version>${pagehelper-version}version>
        dependency>
        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>${druid-version}version>
        dependency>
        
        <dependency>
            <groupId>org.mybatis.generatorgroupId>
            <artifactId>mybatis-generator-coreartifactId>
            <version>${mybatis-generator-version}version>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>${mysql-version}version>
        dependency>
        
        <dependency>
            <groupId>io.springfoxgroupId>
            <artifactId>springfox-swagger2artifactId>
            <version>${swagger-version}version>
        dependency>
        <dependency>
            <groupId>io.springfoxgroupId>
            <artifactId>springfox-swagger-uiartifactId>
            <version>${swagger-version}version>
        dependency>
        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombokgroupId>
                            <artifactId>lombokartifactId>
                        exclude>
                    excludes>
                configuration>
            plugin>
        plugins>
    build>

project>

1.2、Yaml配置

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mall-wnx-1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root

mybatis:
  mapper-locations:
    - classpath:mapper/*.xml
    - classpath*:com/**/mapper/*.xml

2、整合Mybatis

在整合Mybatis上面,我们只需要将数据源的信息在yaml告知即可,甚至不用写driverClassName,SpringBoot本身就可以根据url类型去推断你用的数据库为何?用的啥连接?真的厉害!想想Spring整合的时候做的事,1:指定mapper文件位置,2:扫描Mapper接口。配置类搞定!

2.1、指定mapper文件位置

可见application.yaml

2.2、配置类

package com.wnx.mall.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

/**
 * MyBatis配置类
 * @author wangnaixing
 */
@Configuration
@MapperScan("com.wnx.mall.mbg.mapper")
public class MyBatisConfig {
}

3、整合MyBatisGenerator

3.1、两个配置文件

  • generator.properties

指明生成的数据源在哪?其内容如下:

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://127.0.0.1:3306/mall-wnx-1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.userId=root
jdbc.password=root
  • generatorConfig.xml

指明生成的规则为何?其内容如下:


    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="generator.properties"/>
        <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
            <property name="beginningDelimiter" value="`"/>
            <property name="endingDelimiter" value="`"/>
            <property name="javaFileEncoding" value="UTF-8"/>
            
            <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
            
            <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
            
            <commentGenerator type="com.wnx.mall.mbg.CommentGenerator">
                
                <property name="suppressAllComments" value="true"/>
                <property name="suppressDate" value="true"/>
                <property name="addRemarkComments" value="true"/>
            commentGenerator>
            
            <jdbcConnection driverClass="${jdbc.driverClass}"
                            connectionURL="${jdbc.connectionURL}"
                            userId="${jdbc.userId}"
                            password="${jdbc.password}">
                
                <property name="nullCatalogMeansCurrent" value="true" />
            jdbcConnection>
            
            <javaModelGenerator targetPackage="com.wnx.mall.mbg.model" targetProject="src\main\java"/>
            
            <sqlMapGenerator targetPackage="com.wnx.mall.mbg.mapper" targetProject="src\main\resources"/>
            
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.wnx.mall.mbg.mapper"
                                 targetProject="src\main\java"/>
            
            <table tableName="pms_brand">
                <generatedKey column="id" sqlStatement="MySql" identity="true"/>
            table>
        context>
    generatorConfiguration>

3.2、注释生成规则类

package com.wnx.mall.mbg;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;

import java.util.Properties;

/**
 * 自定义注释生成器
 * @author wangnaixing
 */
public class CommentGenerator extends DefaultCommentGenerator {
    private boolean addRemarkComments = false;
    private static final String EXAMPLE_SUFFIX="Example";
    private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME="io.swagger.annotations.ApiModelProperty";

    /**
     * 设置用户配置的参数
     */
    @Override
    public void addConfigurationProperties(Properties properties) {
        super.addConfigurationProperties(properties);
        this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    }

    /**
     * 给字段添加注释
     */
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        String remarks = introspectedColumn.getRemarks();
        //根据参数和备注信息判断是否添加备注信息
        if(addRemarkComments&&StringUtility.stringHasValue(remarks)){
//            addFieldJavaDoc(field, remarks);
            //数据库中特殊字符需要转义
            if(remarks.contains("\"")){
                remarks = remarks.replace("\"","'");
            }
            //给model的字段添加swagger注解
            field.addJavaDocLine("@ApiModelProperty(value = \""+remarks+"\")");
        }
    }

    /**
     * 给model的字段添加注释
     */
    private void addFieldJavaDoc(Field field, String remarks) {
        //文档注释开始
        field.addJavaDocLine("/**");
        //获取数据库字段的备注信息
        String[] remarkLines = remarks.split(System.getProperty("line.separator"));
        for(String remarkLine:remarkLines){
            field.addJavaDocLine(" * "+remarkLine);
        }
        addJavadocTag(field, false);
        field.addJavaDocLine(" */");
    }

    @Override
    public void addJavaFileComment(CompilationUnit compilationUnit) {
        super.addJavaFileComment(compilationUnit);
        //只在model中添加swagger注解类的导入
        if(!compilationUnit.isJavaInterface()&&!compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
        }
    }
}

3.3、生产MBG代码的类

package com.wnx.mall.mbg;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 *  用于生产MBG的代码
 * @author wangnaixing
 */
public class Generator {
    public static void main(String[] args) throws Exception {
        //MBG 执行过程中的警告信息
        List<String> warnings = new ArrayList<String>();
        //当生成的代码重复时,覆盖原代码
        boolean overwrite = true;
        //读取我们的 MBG 配置文件
        InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //创建 MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //执行生成代码
        myBatisGenerator.generate(null);
        //输出警告信息
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}

4、整合Swagger

Swagger是一个优秀的RESTAPI接口调试工具,整合了他有利于我们前后端对接,后端进行接口测试!

4.1、配置类

package com.wnx.mall.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Swagger2API文档的配置
 * @author wangnaixing
 */
@Configuration
@EnableSwagger2
public class Swagger2Config {
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //为当前包下controller生成API文档
                .apis(RequestHandlerSelectors.basePackage("com.wnx.mall.controller"))
                //为有@Api注解的Controller生成API文档
//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                //为有@ApiOperation注解的方法生成API文档
//                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("SwaggerUI演示")
                .description("mall项目")
                .contact("wangnaixing")
                .version("1.0")
                .build();
    }
}

4.2、使用

@Api(tags = "PmsBrandController",description = "品牌管理") //Controller类
@ApiOperation("新增品牌") //Controller方法
@ApiModelProperty(value = "首字母") //POJO模型实体
findByPage(@RequestParam(value = "pageNum",defaultValue = "1") @ApiParam("页码") Integer pageNum,
@RequestParam(value = "pageSize",defaultValue = "5") @ApiParam("每页大小") Integer pageSize) //请求参数

Mall项目整合MyBatis|Swagger-UI|pageHelper|MGB(代码生成器)实现增删改查的笔记_第1张图片

5、源码下载

可在我的资源处下载!

Mall项目整合MyBatis|Swagger-UI|pageHelper|MGB(代码生成器)实现增删改查的笔记_第2张图片

你可能感兴趣的:(mall项目学习,java,spring,boot,swagger2,mybatis)