使用IDEA快速开发之EasyCode插件

一、插件安装

1.这个不多说,idea安装插件应该都会,如有疑问可自行查阅相关文档
在这里插入图片描述

二、模板配置

easyCode有自带的模板生成文件,生成的分页语句是mysql的语法
在这里插入图片描述

这里我们新建一个模板来适应我们的项目
在这里插入图片描述
新创建一个group name 命名为myTemplate
在myTemplate下面新建模板文件

1.mapper.xml.vm

##引入mybatis支持
$!{mybatisSupport.vm}

##设置保存名称与保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="$!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper">
    <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
#foreach($column in $tableInfo.fullColumn)
        <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
#end
    </resultMap>
    <!--查询单个-->
    <select id="selectByPrimaryKey" resultMap="$!{tableInfo.name}Map">
        select
          #allSqlColumn()

        from $!tableInfo.obj.name
        where $!pk.obj.name = #{$!pk.name}
    </select>
    <!--查询指定行数据-->
    <select id="queryAll" resultMap="$!{tableInfo.name}Map">
        select
          #allSqlColumn()

        from $!tableInfo.obj.name
        <where>
#foreach($column in $tableInfo.fullColumn)
            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                and $!column.obj.name = #{$!column.name}
            </if>
#end
        </where>
    </select>
    <!--统计总行数-->
    <select id="count" resultType="java.lang.Long">
        select count(1)
        from $!tableInfo.obj.name
        <where>
#foreach($column in $tableInfo.fullColumn)
            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                and $!column.obj.name = #{$!column.name}
            </if>
#end
        </where>
    </select>
    <!--新增所有列-->
    <insert id="insertSelective" keyProperty="$!pk.name" useGeneratedKeys="true">
        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)
        values (#foreach($column in $tableInfo.otherColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)
    </insert>
    <insert id="insertBatch" keyProperty="$!pk.name" useGeneratedKeys="true">
        insert all
        <foreach collection="list" item="item" separator=",">
        into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)
        values
        (#foreach($column in $tableInfo.otherColumn)#{item.$!{column.name}}#if($velocityHasNext), #end#end)
        </foreach>
        select 1 from dual
    </insert>
    <!--通过主键修改数据-->
    <update id="updateByPrimaryKeySelective">
        update $!{tableInfo.obj.name}
        <set>
#foreach($column in $tableInfo.otherColumn)
            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                $!column.obj.name = #{$!column.name},
            </if>
#end
        </set>
        where $!pk.obj.name = #{$!pk.name}
    </update>
    <!--通过主键删除-->
    <delete id="deleteByPrimaryKey">
        delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}
    </delete>

</mapper>

2.entity.java.vm

##引入宏定义
$!{define.vm}

##使用宏定义设置回调(保存位置与文件后缀)
#save("/entity", ".java")

##使用宏定义设置包后缀
#setPackageSuffix("entity")

##使用全局变量实现默认包导入
$!{autoImport.vm}
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

##使用宏定义实现类注释信息
#tableComment("实体类")
@ApiModel(value = "$!{tableInfo.name}", description = "$!{tableInfo.comment}")
public class $!{tableInfo.name} implements Serializable {
    
    private static final long serialVersionUID = $!tool.serial();

#foreach($column in $tableInfo.fullColumn)

    #if(${column.comment})/**
     * ${column.comment}
     */#end
     
    @ApiModelProperty(value = "${column.comment}")
    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end

#foreach($column in $tableInfo.fullColumn)
##使用宏定义实现get,set方法
#getSetMethod($column)
#end

}

3.service.java.vm

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Service"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import com.github.pagehelper.PageInfo;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表服务接口
 *
 * @author $!author
 * @since $!time.currTime()
 */
public interface $!{tableName} {

    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    $!{tableInfo.name} selectByPrimaryKey($!pk.shortType $!pk.name);

    /**
     * 分页查询
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 筛选条件
     * @return 查询结果
     */
    PageInfo<$!{tableInfo.name}> queryByPage(int pageNum, int pageSize, $!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 实例对象
     */
    $!{tableInfo.name} insertSelective($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 实例对象
     */
    $!{tableInfo.name} updateByPrimaryKeySelective($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 删除的数据量
     */
    int deleteByPrimaryKey($!pk.shortType $!pk.name);

}

4.serviceImpl.java.vm

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import javax.annotation.Resource;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表服务实现类
 *
 * @author $!author
 * @since $!time.currTime()
 */
@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")
public class $!{tableName} implements $!{tableInfo.name}Service {
    
    @Resource
    private $!{tableInfo.name}Mapper mapper;

    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    @Override
    public $!{tableInfo.name} selectByPrimaryKey($!pk.shortType $!pk.name) {
        return this.mapper.selectByPrimaryKey($!pk.name);
    }

    /**
     * 分页查询
     *
     * @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件
     * @return 查询结果
     */
    @Override
    public PageInfo<$!{tableInfo.name}> queryByPage(int pageNum, int pageSize, $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {
        PageHelper.startPage(pageNum,pageSize);
        return new PageInfo<>(this.mapper.queryAll($!{tool.firstLowerCase($tableInfo.name)}));
    }

    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 实例对象
     */
    @Override
    public $!{tableInfo.name} insertSelective($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        this.mapper.insertSelective($!tool.firstLowerCase($!{tableInfo.name}));
        return $!tool.firstLowerCase($!{tableInfo.name});
    }

    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 实例对象
     */
    @Override
    public $!{tableInfo.name} updateByPrimaryKeySelective($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        this.mapper.updateByPrimaryKeySelective($!tool.firstLowerCase($!{tableInfo.name}));
        return this.selectByPrimaryKey($!{tool.firstLowerCase($!{tableInfo.name})}.get$!tool.firstUpperCase($pk.name)());
    }

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 是否成功
     */
    @Override
    public int deleteByPrimaryKey($!pk.shortType $!pk.name) {
        return this.mapper.deleteByPrimaryKey($!pk.name);
    }
}

5.mapper.java.vm

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Mapper"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/mapper"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}mapper;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层
 *
 * @author $!author
 * @since $!time.currTime()
 */
public interface $!{tableName} {

    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    $!{tableInfo.name} selectByPrimaryKey($!pk.shortType $!pk.name);

    /**
     * 查询指定行数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 查询条件
     * @return 对象列表
     */
    List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 统计总行数
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 查询条件
     * @return 总行数
     */
    long count($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 影响行数
     */
    int insertSelective($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 批量新增数据(MyBatis原生foreach方法)
     *
     * @param list List<$!{tableInfo.name}> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("list") List<$!{tableInfo.name}> list);

    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 影响行数
     */
    int updateByPrimaryKeySelective($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 影响行数
     */
    int deleteByPrimaryKey($!pk.shortType $!pk.name);

}

6.controller.java.vm

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Controller"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/controller"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import javax.annotation.Resource;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.github.pagehelper.PageInfo;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表控制层
 *
 * @author $!author
 * @since $!time.currTime()
 */
@RestController
@RequestMapping("/$!tool.firstLowerCase($tableInfo.name)")
@Api(tags= "$!{tableInfo.comment}($!{tableInfo.name})")
public class $!{tableName} {

    /**
     * 服务对象
     */
    @Resource(name = "$!tool.firstLowerCase($!{tableInfo.name})Service")
    private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;

    /**
     * 分页查询$!{tableInfo.comment}数据
     *
     * @return 实例对象集合
     */
    @ApiOperation(value = "分页查询$!{tableInfo.comment}数据")
    @GetMapping("/page/{pageNum}/{pageSize}")
    public ResponseEntity<List> queryByPage(@ApiParam(name = "pageNum", value = "当前页") @PathVariable(name="pageNum") int pageNum, @ApiParam(name = "pageSize", value = "每页条数") @PathVariable(name="pageSize") int pageSize, @ApiParam(name = "$!{tool.firstLowerCase($tableInfo.name)}", value = "$!{tableInfo.comment}对象") $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {
        PageInfo<$!{tableInfo.name}> pageInfo = this.$!{tool.firstLowerCase($tableInfo.name)}Service.queryByPage(pageNum,pageSize,$!{tool.firstLowerCase($tableInfo.name)});
        return ResponseEntity.ok(pageInfo.getList());
    }
    
    /**
     * 通过主键查询单条$!{tableInfo.comment}数据
     *
     * @param $!{tool.firstLowerCase($!pk.name)} 主键
     * @return 单条数据
     */
    @ApiOperation(value = "通过$!{tool.firstLowerCase($!pk.name)}主键查询单条$!{tableInfo.comment}数据")
    @GetMapping("/{$!{tool.firstLowerCase($!pk.name)}}")
    public ResponseEntity<$!{tableInfo.name}> selectByPrimaryKey(@ApiParam(name = "$!{tool.firstLowerCase($!pk.name)}", value = "$!pk.name主键") @PathVariable(name="$!pk.name") $!pk.shortType $!{tool.firstLowerCase($!pk.name)}) {
        return ResponseEntity.ok(this.$!{tool.firstLowerCase($tableInfo.name)}Service.selectByPrimaryKey($!pk.name));
    }

    /**
     * 新增单条$!{tableInfo.comment}数据
     *
     * @param $!{tool.firstLowerCase($tableInfo.name)} 实体
     * @return 新增结果
     */
    @ApiOperation(value = "新增单条$!{tableInfo.comment}数据")
    @PostMapping
    public ResponseEntity<$!{tableInfo.name}> insertSelective(@ApiParam(name = "$!{tool.firstLowerCase($tableInfo.name)}", value = "$!{tableInfo.comment}对象") @RequestBody $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {
        return ResponseEntity.ok(this.$!{tool.firstLowerCase($tableInfo.name)}Service.insertSelective($!{tool.firstLowerCase($tableInfo.name)}));
    }

    /**
     * 通过主键$!{tool.firstLowerCase($!pk.name)}修改单条$!{tableInfo.comment}数据
     *
     * @param $!{tool.firstLowerCase($tableInfo.name)} 实体
     * @return 修改结果
     */
    @ApiOperation(value = "通过主键$!{tool.firstLowerCase($!pk.name)}修改单条$!{tableInfo.comment}数据")
    @PutMapping
    public ResponseEntity<$!{tableInfo.name}> updateByPrimaryKeySelective(@ApiParam(name = "$!{tool.firstLowerCase($tableInfo.name)}", value = "$!{tableInfo.comment}") @RequestBody $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {
        return ResponseEntity.ok(this.$!{tool.firstLowerCase($tableInfo.name)}Service.updateByPrimaryKeySelective($!{tool.firstLowerCase($tableInfo.name)}));
    }

    /**
     * 通过$!{tool.firstLowerCase($!pk.name)}主键删除单条$!{tableInfo.comment}数据
     *
     * @param $!{tool.firstLowerCase($!pk.name)} 主键
     * @return 删除结果数
     */
    @ApiOperation(value = "通过$!{tool.firstLowerCase($!pk.name)}主键删除单条$!{tableInfo.comment}数据")
    @DeleteMapping("/{$!{tool.firstLowerCase($!pk.name)}}")
    public ResponseEntity<Integer> deleteByPrimaryKey(@ApiParam(name = "$!{tool.firstLowerCase($!pk.name)}", value = "$!{tool.firstLowerCase($!pk.name)}主键") @PathVariable(name="$!pk.name") $!pk.shortType $!{tool.firstLowerCase($!pk.name)}) {
        return ResponseEntity.ok(this.$!{tool.firstLowerCase($tableInfo.name)}Service.deleteByPrimaryKey($!{tool.firstLowerCase($!pk.name)}));
    }

}

三、新建springBoot项目

1.springBoot版本

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

2.项目依赖

注意:这里我们手动排除了annotations以及models依赖(1.5.20版本),并重新引入1.5.21版本,主要是为了解决访问swagger页面时控制台For input string:““报错问题。

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>

        <!--oracle数据库驱动-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>6.0</version>
        </dependency>

        <!--swagger相关依赖-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <exclusions>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-annotations</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-models</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.21</version>
        </dependency>

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.1</version>
        </dependency>

    </dependencies>

3.yml文件配置

注意替换数据库ip与账号密码

server:
  port: 8088
spring:
  application:
    name: demo
  datasource:
    password: bbb
    username: aaa
    url: jdbc:oracle:thin:@***.**.*.***:1521:aaa
    driver-class-name: oracle.jdbc.driver.OracleDriver
  #解决swagger启动报错,Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  configuration:
    #驼峰命名
    map-underscore-to-camel-case: true
    #映射null值
    call-setters-on-nulls: true
swagger:
  open: true #生成swagger文档

4.启动类

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

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

}

四、代码生成

1.数据库连接

加粗样式在这里插入图片描述

在这里插入图片描述填写数据库连接信息,可以点击test测试一下,有个出现绿色的√代表连接成功
在这里插入图片描述

2.一键生成代码

找到我们要生成的表,右键选择EasyCode,然后点击Generate Code
在这里插入图片描述填写文件生成的位置信息,如果点击ok的时候报错可以在上一步的时候先进行config table
在这里插入图片描述
红色文件为自动生成的
在这里插入图片描述

3.接口访问测试

启动项目访问
在这里插入图片描述
在这里插入图片描述

五、整合swagger

创建配置类SwaggerConfig

import io.swagger.annotations.ApiOperation;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

/**
 * 描述 : swagger配置类
 *
 * @AUTHOR 
 * @DATE 2022/4/15 15:15
 * @DESCRIPTION:
 */
@Configuration
@EnableSwagger2
@ConditionalOnProperty(prefix = "swagger", name = "open", havingValue = "true")
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        Contact contact = new Contact("作者","","**********@qq.com");
        ApiInfo apiInfo=new ApiInfo(
                "XXX系统接口",
                "包含系统内所有可用接口说明",
                "v1.0",
                "",
                contact,
                "",
                "",
                new ArrayList<>()
        );
        return createRestApi(apiInfo);
    }

    public Docket createRestApi(ApiInfo apiInfo) {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)
                .select()
                //这里采用包含注解的方式来确定要显示的接口(建议使用这种)
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }
}

浏览器访问 http://localhost:8088/doc.html

注意:如果在引入UI的时候引入的是springfox-swagger-ui,那么在浏览器访问http://localhost:8088/swagger-ui.html

在这里插入图片描述

### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值