本篇文章小编给大家分享一下myBatis实现三级嵌套复杂对象的赋值问题代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
首先上实体类:三级嵌套如下 (电站 -----> 电桩 ---->电枪)
电站实体类 (实体为JPA写法,不影响mybatis的使用)
package com.weima.cecapp.entities; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.util.Collections; import java.util.List; import java.util.Set; @NoArgsConstructor @Data @Entity @Table(name = "station_info") public class StationInfo { /** * Auto-generated primary key. */ @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(unique = true, nullable = false, updatable = false) private String id; @Column(name = "station_id") private String stationId; @Column(name = "operator_id") private String operatorId; @Column(name = "equipment_owner_id") private String equipmentOwnerId; @Column private String stationName; @Column private String countryCode; @Column private String areaCode; @Column private String address; @Column private String stationTel; @Column private String serviceTel; @Column private Integer stationType; @Column private Integer stationStatus; @Column private Integer parkNums; @Column private Double stationLng; @Column private Double stationLat; @Column private String siteGuide; @Column private Integer construction; @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, orphanRemoval = true, mappedBy = "ownerStationInfo") private Listpictures; @Column private String matchCars; @Column private String parkInfo; @Column private String busineHours; @Column(name = "busine_hours_in_milliseconds") private Long busineHoursInMilliseconds; @Column private String electricityFee; @Column private String serviceFee; @Column private String parkFee; @Column private String payment; @Column private Integer supportOrder; @Column private String remark; @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, orphanRemoval = true, mappedBy = "ownerStationInfo") @BatchSize(size = 20) private List equipmentInfos; }
电站图片实体
package com.weima.cecapp.entities; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; @Data @Entity @EqualsAndHashCode(of = {"url"}) @ToString(exclude = {"ownerStationInfo"}) @Table(name = "station_picture") public class StationPicture { /** * Auto-generated primary key. */ @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(unique = true, nullable = false, insertable = true, updatable = false) private String id; @ManyToOne(fetch = FetchType.EAGER, optional = false) @JoinColumn(nullable = false, updatable = false) private StationInfo ownerStationInfo; @Column private String url; }
电桩实体类
package com.weima.cecapp.entities; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.List; @Data @Entity @EqualsAndHashCode(of = {"equipmentId"}) @ToString(exclude = {"ownerStationInfo"}) @Table(name = "equipment_info") public class EquipmentInfo { /** * Auto-generated primary key. */ @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(unique = true, nullable = false, updatable = false) private String id; @Column(name = "equipment_id") private String equipmentId; @ManyToOne(fetch = FetchType.EAGER, optional = false) @JoinColumn(nullable = false, updatable = false) private StationInfo ownerStationInfo; @Column(name = "manufacturer_id") private String manufacturerId; @Column private String manufacturerName; @Column private String equipmentModel; @Column private String productionDate; public String getProductionDate() { String format = null; if (this.productionDate != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { format = sdf.format(sdf.parse(this.productionDate)); } catch (ParseException e) { e.printStackTrace(); } return format; } return format; } @Column private String equipmentType; @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "ownerEquipmentInfo", cascade = {CascadeType.PERSIST}) @BatchSize(size = 20) private ListconnectorInfos; @Column private Double equipmentLng; @Column private Double equipmentLat; @Column private Double power; @Column private String equipmentName; @Column(name = "equipment_no") //cpo's custom equipmentId mostly for Evstation private String equipmentNo; }
电枪实体类
package com.weima.cecapp.entities; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; @Data @Entity @EqualsAndHashCode(of = {"connectorId"}) @ToString(exclude = {"ownerEquipmentInfo"}) @Table(name = "connector_info") public class ConnectorInfo { /** * Auto-generated primary key. */ @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(unique = true, nullable = false, updatable = false) private String id; @ManyToOne(fetch = FetchType.EAGER, optional = false) @JoinColumn(nullable = false, updatable = false) private EquipmentInfo ownerEquipmentInfo; @Column(name = "connector_id") private String connectorId; @Column private String connectorName; @Column private Integer connectorType; @Column private Integer voltageUpperLimits; @Column private Integer voltageLowerLimits; @Column private Integer current; @Column private Double power; @Column private String parkNo; @Column private Integer nationalStandard; @Column(name = "connector_no") //cpo's custom connectorId mostly for Evstation private String connectorNo; }
mapper 文件的resultMap映射及Sql语句的书写,要特别注意映射关系
-- 要特别注意的是 t_f_ 的前缀,这个关乎到映射不映射上的根本。