数据库属性带下划线的注意事项(下划线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中,需要用驼峰命名法的数据属性,不能用下划线
总结
数据库中属性带下划线的情况下,需要在后端修改两点