解决问题
可能的原因就是java实体类和数据库表中字段的命名格式不一样
例如: java程序中实体类使用的是驼峰:
数据库字段使用的也是驼峰 :
那么你就需要再application.yaml配置类中设置map-underscore-to-camel-case: false (即关闭下划线命名法转化为驼峰命名法的配置),因为mybatis-plus是默认打开的!!
map-underscore-to-camel-case的作用和使用场景:
作用
map-underscore-to-camel-case
是一个配置项,通常用于设置数据库字段名使用下划线命名法(例如:product_intro_imgs)时,是否将其映射为驼峰命名法(例如:productIntroImgs)的Java对象属性名。配置项的值决定了是否执行这种映射。
场景一
当配置项 map-underscore-to-camel-case
设置为 true
时,下划线命名的数据库字段名会被映射为驼峰命名的 Java 对象属性名。以下是一个示例:
假设有一个数据库表 t_product
,其中包含字段 product_name
,product_intro_imgs
,product_price
,使用下划线命名法。如果设置 map-underscore-to-camel-case
为 true
,那么在映射到 Java 对象时,这些字段将会被转换成驼峰命名法。
配置为 map-underscore-to-camel-case: true
:
map-underscore-to-camel-case: true
Java 对象示例:
public class Product {
private Integer id;
private String productName; // 映射了字段 product_name
private String productIntroImgs; // 映射了字段 product_intro_imgs
private BigDecimal productPrice; // 映射了字段 product_price
// 其他属性...
}
在这个示例中,product_name
被映射为 productName
,product_intro_imgs
被映射为 productIntroImgs
,product_price
被映射为 productPrice
。
如果将配置项设置为 map-underscore-to-camel-case: false
,则数据库字段名和 Java 对象属性名将保持一致,不会进行映射。
场景二
当配置项 map-underscore-to-camel-case
设置为 false
时,数据库字段名和 Java 对象属性名将保持一致,不会进行驼峰命名的映射。以下是一个示例:
假设有一个数据库表 t_student
,其中包含字段 student_name
,student_age
,student_email
,使用下划线命名法。如果设置 map-underscore-to-camel-case
为 false
,那么在映射到 Java 对象时,字段名不会发生变化。
配置为 map-underscore-to-camel-case: false
:
map-underscore-to-camel-case: false
Java 对象示例:
public class Student {
private Integer id;
private String student_name; // 保持字段名不变
private Integer student_age; // 保持字段名不变
private String student_email; // 保持字段名不变
// 其他属性...
}
在这个示例中,数据库字段名 student_name
、student_age
、student_email
都保持不变,与 Java 对象的属性名一致。
这种情况下,即使数据库字段使用下划线命名法,映射到 Java 对象时也会保持原样,不进行额外的命名映射。
场景三
如果java程序中实体类中属性是驼峰命名, 且数据库中对应的字段也是驼峰命名, 那么想要成功映射关系, 就跟场景二一样, 将map-underscore-to-camel-case: false这样设置, 即"关闭下划线命名法转化为驼峰命名法" 这样你和数据库的映射就不会受到影响了(即mybatis默认设置map-underscore-to-camel-case: true的这个影响)