mall学习教程笔记--Mybatis generator和Swagger

github学习项目--mall学习教程

https://www.macrozheng.com/mall/catalog/mall_catalog.html

Mybatis generator

配置文件介绍

MyBatis的代码生成器,可以根据数据库生成model、mapper.xml、mapper接口和Example,通常情况下的单表查询不用再手写mapper。

  1. 其中Example类中包含一个静态类Criteria,可以动态生成sql,不再用修改sql语句:
    https://zhuanlan.zhihu.com/p/60166358
  2. 每次生成后会有提示哪些文件被覆盖,mapper.xml是追加的方式要先清空

mybatis两个内置参数:

  1. _parameter:代表整个参数
    单个参数:_parameter就是这个参数
    多个参数:参数会被封装为一个map:_parameter就是代表这个map
  2. _databaseId:如果配置了databaseIdProvider标签
  3. _databaseId 就是代表当前数据库的别名,比如Oracle

注解说明

https://www.cnblogs.com/tongongV/p/14188678.html

@MapperScan 注解和 mybatis.mapper-locations 配置两者缺一不可@MapperScan 注解和 mybatis.mapper-locations 配置两者缺一不可

  1. 使用generator先生成mapper类和xml,然后使用@MapperScan 注解和 mybatis.mapper-locations指定生成的包和xml
  2. @MapperScan是用来扫描javabean的, mybatis.mapper-locations 是用来扫描xml的,配置有问题会影响运行,运行初始化时失败。mapper-locations 支持配置多个

application.yml

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

#classpath 和 classpath* 区别:
#classpath:只会到你的class路径中查找找文件;src对应的编译文件路径
#classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 

MyBatisConfig.java,实际放到Application主类上注解即可。

@Configuration
@MapperScan("com.macro.mall.tiny.mbg.mapper")
public class MyBatisConfig {
}

Swagger

@Api:用于修饰Controller类,生成Controller相关文档信息
@ApiOperation:用于修饰Controller类中的方法,生成接口方法相关文档信息
@ApiParam:用于修饰接口中的参数,生成接口参数相关文档信息
@ApiModelProperty:用于修饰实体类的属性,当实体类是请求参数或返回结果时,直接生成相关文档信息

使用Mybatis generator的注释生成CommentGenerator,在生成model类时注释就添加注解:@ApiModelProperty(数据库中字段注释),和导入包ApiModelProperty
https://www.macrozheng.com/mall/architect/mall_arch_02.html#给pmsbrandcontroller添加swagger注解

认证登录

    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //为当前包下controller生成API文档
                .apis(RequestHandlerSelectors.basePackage("com.macro.mall.tiny.controller"))
                .paths(PathSelectors.any())
                .build()
                //添加登录认证
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts());
    }

    private List<ApiKey> securitySchemes() {
        //设置请求头信息
        List<ApiKey> result = new ArrayList<>();
        // ApiKey第一个参数是ApiKey名称(似乎没用),第二个参数是表头中要带的key值,第三个参数固定为header
        ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");
        result.add(apiKey);
        return result;
    }

    private List<SecurityContext> securityContexts() {
        //设置需要登录认证的路径
        List<SecurityContext> result = new ArrayList<>();
        result.add(getContextByPath("/brand/.*"));
        return result;
    }

后面设置filter从表头获取request.getHeader("Authorization")进行验证

posted @ 2022-11-06 17:17  Saski&Naruto  阅读(262)  评论(0)    收藏  举报