springboot配置处理mybatis实体类驼峰命名,数据库表中下划线格式的统一映射

一、背景

springboot 项目,mybatis。

实体类,属性驼峰格式,如 orderNumber

package com.example.usermanagement.entity;


import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;

@Entity
@Table(name = "shipping")
@Getter
@Setter
@Data
@NoArgsConstructor
public class Shipping {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String orderNumber; // 订单号

    @Column(nullable = false)
    private String shippingDate; // 发货日期

    @Column(nullable = false)
    private String shippingAddress; // 发货地址

    @Column(nullable = false)
    private String trackingNumber; // 快递单号

    @Column(nullable = false)
    private String recipientName; // 收货人姓名

    @Column(nullable = false)
    private String recipientPhone; // 收货人手机号
}

数据库中,表字段为下划线格式

CREATE TABLE `shipping` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `order_number` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '订单号',
  `shipping_date` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发货日期',
  `shipping_address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发货地址',
  `tracking_number` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '快递单号',
  `recipient_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货人姓名',
  `recipient_phone` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货人手机号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

二、解决办法 

1、 application.yml 配置

application.yml 中配置实现驼峰命名处理下划线映射到实体的方式,你可以使用 MyBatis 的配置属性来控制。

以下是一个示例的 application.yml 配置文件:

mybatis:
  configuration:
    map-underscore-to-camel-case: true

在上述示例中,通过 mybatis.configuration.map-underscore-to-camel-case: true 配置项,将驼峰命名开启,并将下划线自动映射到实体类的驼峰命名属性。

这样配置后,MyBatis 将会自动将数据库表字段的下划线转换为实体类中对应的驼峰命名属性,实现统一的命名风格。

2、注解Mapper编写

import com.example.demo.model.Shipping;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface ShippingMapper {

    @Insert("INSERT INTO shipping (order_number, shipping_date,shipping_address,tracking_number,recipient_name,recipient_phone) VALUES (#{orderNumber}, #{shippingDate},#{shippingAddress},#{trackingNumber},#{recipientName},#{recipientPhone})")
    int insertShipping(Shipping shipping);
    
    // 其他方法...

}

在上述示例中,我们使用了 @Mapper 注解来标识这是一个 MyBatis 的 Mapper 接口,使用 @Insert 注解来指定插入语句,并通过 #{} 占位符引用实体类 Shipping 中的字段。

需要注意的是,这里的占位符名字需要与实体类 Shipping 中的字段名保持一致,否则会导致插入失败。

猜你喜欢

转载自blog.csdn.net/qq_39208536/article/details/132225305
今日推荐