数据库属性带下划线的注意事项(下划线bug)

需要在application.properties文件中加入一行代码

 1 #开启驼峰命名 2 mybatis.configuration.mapUnderscoreToCamelCase=true 

来开启驼峰命名

(如果你希望全局处理下划线到驼峰的映射,MyBatis 提供了一个配置项 mapUnderscoreToCamelCase,当它设置为 true 时,MyBatis 会自动将下划线风格的数据库字段映射到驼峰风格的 Java 属性。)

否则在后面从数据库查询数据时,表中带下划线的属性值会变为null

 

 

①如果数据库的属性带有下划线,如下

②实体类代码

 1 package com.lian.pojo;
 2 
 3 import com.baomidou.mybatisplus.annotation.IdType;
 4 import com.baomidou.mybatisplus.annotation.TableField;
 5 import com.baomidou.mybatisplus.annotation.TableId;
 6 import java.io.Serializable;
 7 import lombok.Data;
 8 import lombok.EqualsAndHashCode;
 9 import lombok.experimental.Accessors;
10 
11 /**
12  * <p>
13  * 
14  * </p>
15  *
16  * @author lsx
17  * @since 2024-10-08
18  */
19 @Data
20 @EqualsAndHashCode(callSuper = false)
21 @Accessors(chain = true)
22 public class Materials implements Serializable {
23 
24     private static final long serialVersionUID=1L;
25 
26     /**
27      * 物料编号(主键)
28      */
29     @TableId(value = "material_id", type = IdType.AUTO)
30     private Integer materialId;
31 
32     /**
33      * 物料名称
34      */
35 
36     private String materialName;
37 
38     /**
39      * 物料可用数量
40      */
41     private Integer quantity;
42 
43 }

 

③操作方法

在mapper文件中的sql应该是

 前面的material_name是数据库中对应的material_name,后面的materialName是实体类中与material_name对应的变量名称!!!!!!!!!!!

④在传递参数时,传递的参数名称应是与实体类中相同的变量名,例如上面这个例子,我需要传递数据库中的material_name和quantity,然后我在apipost中测试时传递的数据应为:

 应该与实体类中名字相同

 

 

⑤报错信息

(1)如果在mapper文件中如下图所写时(后面values的变量未与实体类对应时,后端会报错对应的material_name没有对应的getter方法

 报错信息

 (2)如果在apipost中传递数据时,传递参数仍写的是带下划线的属性名(material_name)而不是实体类中的属性名(materialName)的话,会报错material_name属性值为null

如下(错误的情况)

 报错信息

对应的mapper文件代码如下
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.lian.mapper.MaterialsMapper">
 6     <select id="queryMaterial" resultType="com.lian.pojo.Materials">
 7         SELECT * FROM materials
 8         <where>
 9             <if test="materialName != null and materialName != ''">
10                  material_name LIKE CONCAT('%', #{materialName}, '%')
11             </if>
12         </where>
13     </select>
14 </mapper>

 

 ⑥在前端vue中,需要用驼峰命名法的数据属性,不能用下划线

总结

数据库中属性带下划线的情况下,需要在后端修改两点

(1)在mapper语句中,需要将后面values中的属性名与实体类中的属性名对应

(2)在传递参数时,应该与实体类中的属性名对应,而不是与数据库表中的属性名对应

posted @ 2024-10-09 15:17  连师傅只会helloword  阅读(38)  评论(0编辑  收藏  举报