一、背景
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
中的字段名保持一致,否则会导致插入失败。