mall 项目学习日志-1

本文档介绍了如何配置MyBatis,包括pom依赖、application.yml中的数据源和Mapper配置,以及MyBatis Generator的详细配置。同时,探讨了Swagger2的使用,包括配置、常见问题及其实现API文档的方法。此外,还涉及了使用MyBatis Generator和MyBatis-Plus生成代码的步骤,并讲解了通过Redis实现验证码功能的关键点。
摘要由CSDN通过智能技术生成

学习文档

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下

  1. <properties resource="jdbc.properties"/> 里导入数据库配置,引号里写的是jdbc.properties相对于resources的路径,使用方法${}
  2. beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号
  3. 指明自动生成注释的类
  4. <table tableName="pms_brand"> 需要生成代码的表名。
  5. 可以生成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);

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值