1. 背景
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;
2、解決策
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. アノテーションマッパーのコンパイル
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
エンティティ クラスのフィールド名と一致している必要があり、そうでない場合は挿入が失敗することに注意してください。