1. SQL 映射问题
purchase_peopleID
、purchase_time
和 purchase_url
在 SQL 语句中是有选取的:
select id, user_id, dept_id, product_no, name, image_url, product_style, product_color, product_size, product_weight, batch_number, purchase_price, selling_price, product_location, anchor_get_time, anchor_id, receiving_time, purchase_peopleID, purchase_time, purchase_url
但是在 MyBatis 的 resultMap
或者 parameterMap
中,可能没有正确地映射这些字段到 Product
类中的对应属性。
2. 检查 Product
类的属性映射
确保 Product
类中有与数据库字段相匹配的属性,并且这些属性的命名和 SQL 查询中的字段一致。比如
public class Product {
private Long id;
private Long userId;
private Long deptId;
private String productNo;
private String name;
private String imageUrl;
private String productStyle;
private String productColor;
private String productSize;
private Double productWeight;
private String batchNumber;
private Double purchasePrice;
private Double sellingPrice;
private String productLocation;
private Date anchorGetTime;
private Long anchorId;
private Date receivingTime;
private Long purchasePeopleID; // 确保字段匹配
private Date purchaseTime; // 确保字段匹配
private String purchaseUrl; // 确保字段匹配
// 其他属性...
}
请检查 purchasePeopleID
、purchaseTime
和 purchaseUrl
是否在 Product
类中有对应的字段,并且类型与数据库字段类型匹配
3. 检查 ProductResult
映射(这个很重要)
在 <select>
标签中使用了 resultMap="ProductResult"
,请确保在 ProductResult
中正确映射了这几个字段。
<resultMap id="ProductResult" type="Product">
<result column="purchase_peopleID" property="purchasePeopleID" />
<result column="purchase_time" property="purchaseTime" />
<result column="purchase_url" property="purchaseUrl" />
<!-- 其他字段的映射 -->
</resultMap>
确保 ProductResult
中的每个字段都有正确的 column
和 property
映射
解释为什么需要 column
和 property
映射:
在 MyBatis 中,resultMap
用于将 SQL 查询结果映射到 Java 对象。当你执行查询时,MyBatis 会根据查询结果中的字段名(column
)与 Java 对象的属性名(property
)进行匹配。为了确保正确映射,必须确保以下两点:
column
:表示数据库查询结果中的列名。property
:表示 Java 类中要映射到该列的属性名。
为什么需要这些映射?
-
数据库列名与 Java 属性名不一致: 数据库中的列名通常使用下划线命名法(例如
purchase_peopleID
),而 Java 类的属性通常使用驼峰命名法(例如purchasePeopleID
)。MyBatis 通过column
和property
映射关系来确保它们能正确匹配。 -
确保数据正确映射: 如果没有这些映射,MyBatis 无法知道数据库中
purchase_peopleID
列的值应该填充到 Java 对象的purchasePeopleID
属性中。因此,在resultMap
中明确映射才能确保数据正确填充到 Java 对象中。