mall学习教程笔记--Mybatis generator和Swagger
github学习项目--mall学习教程
https://www.macrozheng.com/mall/catalog/mall_catalog.html
Mybatis generator
配置文件介绍
MyBatis的代码生成器,可以根据数据库生成model、mapper.xml、mapper接口和Example,通常情况下的单表查询不用再手写mapper。

- 其中Example类中包含一个静态类Criteria,可以动态生成sql,不再用修改sql语句:
https://zhuanlan.zhihu.com/p/60166358 - 每次生成后会有提示哪些文件被覆盖,mapper.xml是追加的方式要先清空
mybatis两个内置参数:
- _parameter:代表整个参数
单个参数:_parameter就是这个参数
多个参数:参数会被封装为一个map:_parameter就是代表这个map - _databaseId:如果配置了databaseIdProvider标签
- _databaseId 就是代表当前数据库的别名,比如Oracle
注解说明
@MapperScan 注解和 mybatis.mapper-locations 配置两者缺一不可@MapperScan 注解和 mybatis.mapper-locations 配置两者缺一不可
- 使用generator先生成mapper类和xml,然后使用@MapperScan 注解和 mybatis.mapper-locations指定生成的包和xml
- @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")进行验证
浙公网安备 33010602011771号