苍穹外卖学习记录day01

207 阅读3分钟

swagger

sqagger常用注解

让接口文档可读性更好 image.png

使用

  • controller使用 image.png

  • 方法使用 image.png

  • 模型类以及属性上使用 image.png

最终效果

image.png

mybatis 驼峰配置

为什么要使用驼峰配置?

在 Spring Boot 中使用 MyBatis 时,配置驼峰命名转换是为了确保数据库字段与 Java 对象属性之间的映射一致性。这种配置通常涉及到将数据库中的下划线命名(如 user_name)转换为 Java 中的驼峰命名(如 userName)。

驼峰命名转换的原因

  1. 命名约定

    • 数据库字段通常使用下划线分隔(snake_case),而 Java 的命名约定倾向于使用驼峰命名法(camelCase)。通过配置驼峰命名转换,可以自动处理这种差异,简化代码。
  2. 减少手动映射

    • 如果不进行驼峰转换,你需要在每个 SQL 查询中手动指定列名,或者在 Java 对象中添加额外的映射注解。配置驼峰命名转换后,MyBatis 可以自动进行映射,减少了冗余的代码。
  3. 提高可读性

    • 在 Java 代码中使用驼峰命名更符合 Java 开发者的习惯,使代码更易于阅读和维护。

如何配置

在 Spring Boot 的 application.propertiesapplication.yml 文件中,可以通过以下配置来启用驼峰命名转换:

application.properties
mybatis.configuration.map-underscore-to-camel-case=true
application.yml
mybatis:
  configuration:
    map-underscore-to-camel-case: true

如果没有启用驼峰命名转换配置,MyBatis 在查询数据库时将不会自动将数据库字段的下划线命名(如 user_iduser_name)映射到 Java 对象的驼峰命名属性(如 userIduserName)。这意味着你需要手动进行字段映射。下面通过示例说明这种情况的效果

数据库表结构

依然使用前面提到的 user 数据库表:

user_iduser_nameemail
1Alicealice@example.com
2Bobbob@example.com

Java 实体类

Java 实体类 User 是这样的:

public class User {
    private Long userId;   // 对应 user_id
    private String userName; // 对应 user_name
    private String email;    // 对应 email

    // Getters 和 Setters
    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

MyBatis Mapper 接口(未启用驼峰配置)

如果没有启用驼峰命名转换,你的 Mapper 接口可能如下:

import org.apache.ibatis.annotations.Select;

public interface UserMapper {
    @Select("SELECT user_id, user_name, email FROM user WHERE user_id = #{id}")
    User findById(Long id);
}

查询示例

@Autowired
private UserMapper userMapper;

public void getUserInfo(Long userId) {
    User user = userMapper.findById(userId);
    System.out.println("User ID: " + user.getUserId());
    System.out.println("User Name: " + user.getUserName());
    System.out.println("Email: " + user.getEmail());
}

在这种情况下,当调用 UserMapperfindById 方法时,MyBatis 会尝试将查询结果的字段直接映射到 User 对象的对应属性。

(即想要将数据表中查询的字段 user_id ,user_name转到User实体类上面,但是User实体类的字段为userId ,userName ,但是因为字段名不一致。所以如果没有驼峰转换,映射将不会成功,)

结果

在这种情况下,由于没有启用驼峰命名转换,MyBatis 在映射时会导致以下问题:

  • user_id 将不会被自动映射到 userId,因此 getUserId() 方法返回的将是 null
  • user_name 将不会被自动映射到 userName,因此 getUserName() 方法返回的也将是 null