需求:通过车辆表的车牌号、车架号,查询车辆保养表中的车辆保养记录
一、数据库
车辆保养表
车辆表![](https://img-blog.csdnimg.cn/11f5c32374e34272b87bee914510b479.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54aK54yr55u855u844CC,size_20,color_FFFFFF,t_70,g_se,x_16)
二、entity类
车辆类
package com.panda.crs.entity;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qf.crs.vo.VehicleRepairList;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@Data
public class Vehicle {
/**
*
*/
private Integer id;
/**
* 车牌号
*/
private String vehicleNumber;
/**
* 车型id
*/
private Integer vehicleModelId;
/**
* 车架号
*/
private String frameNumber;
/**
* 电机号
*/
private String motorNumber;
/**
* 上牌日期
*/
@DateTimeFormat(pattern="yyyy-MM-dd mm:hh:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date licensingDate;
/**
* 车辆状态 0闲置 1租赁
*/
private Integer vehicleStatus;
/**
* 当前里程数
*/
private Integer vehicleMileage;
/**
* 备注
*/
private String vehicleDes;
/**
* 0删除 1未删除
*/
private Integer isDelete;
/**
* 创建时间
*/
@DateTimeFormat(pattern="yyyy-MM-dd mm:hh:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;
/**
* 更新时间
*/
@DateTimeFormat(pattern="yyyy-MM-dd mm:hh:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateDate;
/**
* 车型信息
*/
private VehicleModel vehicleModel;
/**
* 车辆保养信息
*/
private List<VehicleMaintain> VehicleMaintains;
}
车辆保养信息类
package com.panda.crs.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
@Data
@Builder
public class VehicleMaintain {
/**
*
*/
private Integer id;
/**
* 车辆id
*/
private Integer vehicleId;
/**
* 保养级别
* 1级别
* 2级别
* 3级别
*/
private Integer maintenanceLevel;
/**
* 保养周期(里程数)
*/
private Integer maintenanceCycleMileage;
/**
* 保养周期(时间)按月
*/
private Integer maintenanceCycleMonth;
/**
* 保养费用
*/
private Double maintenanceCost;
/**
* 保养日期(最近一次)
*/
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date maintenanceDate;
/**
* 保养状态 0未保养 1已保养 2保养中
*/
private Integer maintenanceStatus;
/**
* 0删除 1未删除
*/
private Integer isDelete;
/**
* 创建时间
*/
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;
/*
* 关系模型
* private Vehicle vehicle;
*/
}
三、mapper
四、service层![](https://img-blog.csdnimg.cn/aaf303896e4246718195c595c05a83c8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54aK54yr55u855u844CC,size_20,color_FFFFFF,t_70,g_se,x_16)
五、Controller层
六、Mapper.xml
<!--车辆保养记录查询结果集映射-->
<resultMap id="BaseResultMaintains" type="Vehicle">
<id property="id" column="vid"/>
<collection property="vehicleMaintains" resultMap="BaseResultMaintain"/>
</resultMap>
<resultMap id="BaseResultMaintain" type="VehicleMaintain">
<result property="maintenanceDate" column="maintenance_date"/>
<result property="maintenanceLevel" column="maintenance_level"/>
<result property="maintenanceCost" column="maintenance_cost"/>
<result property="maintenanceCycleMonth" column="maintenance_cycle_month"/>
<result property="maintenanceCycleMileage" column="maintenance_cycle_mileage"/>
<result property="maintenanceStatus" column="maintenance_status"/>
</resultMap>
<!--车辆保养记录查询-->
<select id="selectMaintain" resultMap="BaseResultMaintains">
SELECT v.id vid,
vm.maintenance_date,
vm.maintenance_level,
vm.maintenance_cost,
vm.maintenance_cycle_month,
vm.maintenance_cycle_mileage,
vm.maintenance_status
FROM t_vehicle v
LEFT JOIN t_vehicle_maintain vm ON v.id=vm.vehicle_id
WHERE v.is_delete=1
AND vm.is_delete=1
<if test="vehicleNumber!=null and vehicleNumber!=''">
AND v.vehicle_number=#{vehicleNumber}
</if>
<if test="frameNumber!=null and frameNumber !=''">
AND v.frame_number=#{frameNumber}
</if>
</select>
解答
找了半天一开始以为sql语句或者结果集映射的问题,经过查询是结果集映射的问题
resultMap结果集映射通过实体类的无参构造方法创建对象,然后通过Getter 和 Setter 方法进行属性的注入,上面案例是因为我在实体类中使用了@Builder注解导致了无参构造方法的被覆盖,
解决方法:去掉@Builder或者加上@NoArgsConstructor(生成一个无参构造方法)