1.mybatis 配置
1. pom依赖
2.application.yml
在application.yml中添加数据源配置和MyBatis的mapper.xml的路径配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
mybatis:
mapper-locations:
- classpath:mapper/*.xml
- classpath*:com/**/mapper/*.xml
3.Mybatis generator 配置文件
官方详解
存放位置:resources下
<properties resource="jdbc.properties"/>
里导入数据库配置,引号里写的是jdbc.properties相对于resources的路径,使用方法${}- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号
- 指明自动生成注释的类
<table tableName="pms_brand">
需要生成代码的表名。- 可以生成tostring方法和序列化方法
<?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="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"/>
<!-- 为生成的Java模型创建一个toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 可以自定义生成model的代码注释-->
<commentGenerator type="com.example.mall.utils.CommentGenerator">
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<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}">
<!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!--指定生成model的路径-->
<javaModelGenerator targetPackage="com.example.mall.model" targetProject="D:\project\java\learning\mall\src\main\java"/>
<!--指定生成mapper.xml的路径,相对resources-->
<sqlMapGenerator targetPackage="mapper" targetProject="D:\project\java\learning\mall\src\main\resources"/>
<!--指定生成mapper接口的的路径-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mall.mapper"
targetProject="D:\project\java\learning\mall\src\main\java"/>
<!--生成全部表tableName设为%-->
<table tableName="pms_brand">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
</context>
</generatorConfiguration>
4.generator类
存放位置:随便
public class Generator {
public static void main(String[] args) throws Exception {
//MBG 执行过程中的警告信息
List<String> warnings = new ArrayList<String>();
//当生成的代码重复时,覆盖原代码
boolean overwrite = true;
//读取我们的配置文件 路径相对于resources
InputStream is = Generator.class.getResourceAsStream("/mapper/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//创建生成器
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行生成代码
myBatisGenerator.generate(null);
//输出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
}
5.model生成结果
一个表会有两个文件
一个实体类
一个xxxExample
利用Criteria我们可以在类中根据自己的需求动态生成sql where字句
用法
6.坑
1.使用 mybatis 逆向工程多次生成 mapper 时,需要将原来的mapper删除
2.分页插件版本过低会有循环依赖,要升级到1.4.1
5.mybatisplus的代码生成
1.依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
2.配置
6.初步结构图
2.swagger-ui使用
地址:http://localhost:8080/swagger-ui.htm
坑
1.版本报错: Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
swagger 2.7.0 不能适配boot 2.6.0及以上
2.description 过时了,要用tag管理
使用方法
使用步骤
1.依赖
2.配置文件
Swagger对生成API文档的范围有三种不同的选择
生成指定包下面的类的API文档
生成有指定注解的类的API文档
生成有指定注解的方法的API文档
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//为当前包下controller生成API文档
.apis(RequestHandlerSelectors.basePackage("com.macro.mall.tiny.controller"))
//为有@Api注解的Controller生成API文档
// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
//为有@ApiOperation注解的方法生成API文档
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
}
3.为controller层添加注解
@Api(tags = “PmsBrandController”, description = “商品品牌管理”)
4.实体类较多的情况下,利用mybatis生成工具 根据 数据库注释 快速生成swagger注解
在 CommentGenerator extends DefaultCommentGenerator
中
1.实现addJavaFileComment方法,导入包
@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));
}
}
2.在addFieldComment
方法里
field:表示每个字段
field.addJavaDocLine("@ApiModelProperty(value = \""+remarks+"\")");
3.效果
@ApiModelProperty(value = "首字母")
private String firstLetter;
3.redis整合实现验证码功能
3.1 实现逻辑
自定义的Redis键值加上手机号生成一个Redis的key,验证码为value存入到Redis中,
并设置过期时间为自己配置的时间(这里为120s)。
3.1注意点
1.从配置文件中导入值
1.1application定义redis key
redis:
key:
prefix:
authCode: "portal:authCode:"
expire:
authCode: 120 # 验证码超期时间
1.2 注入
@Value("${redis.key.prefix.authCode}")
private String REDIS_KEY_PREFIX_AUTH_CODE;
2.StringUtils.isEmpty弃用,用!hasLength代替
3.stringRedisTemplate工具类的使用
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override
public void set(String key, String value) {
// opsForValue()召唤操作值对象ValueOperations
stringRedisTemplate.opsForValue().set(key, value);
}