关于mybatis中下下划线字段查出为null

网上有很多关于mybatis中字段有下滑线值为null的情况,虽然他们的解决方式都是正确的,能够解决问题,但是,他们找的原因都是错误的,你一定使用了逆向工程生成实体,虽然生成的实体有映射,但是真的能够映射成功嘛?我如果手动建实体就不会有这样的情况发生,那么原因就在于set上面,设置值的时候是没有设置成功的,究其原因是因为逆向工程生成的映射没有成功,所以才会赋值失败,以上是我的看法

1、配置问题

<!-- 是否开启自动驼峰命名规则(camel case)映射, -->

<setting name="mapUnderscoreToCamelCase" value="true"/>

或者 

//开启驼峰映射
        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);

mybatis配置文件设置了这项后,查询出来的字段如果带下划线,那么就会去掉下划线,然后采用java驼峰规则。比如数据库字段Parent_id,那么查询出来后,会转为parentid,然后去实体类Category匹配对应的字段。 因为你实体类里有下划线,所以匹配不上。要么采用resultMap 要么禁用掉驼峰规则(不建议禁用)。如果不想该实体类的话,建议采用resultMap。

2、增加set方法转换值的方式

原实体类

 
  1. public class demo {

  2. private String user_name;

  3. private Striing pass_word;

  4.  
  5.  
  6. public String getPass_word(){

  7. return pass_word;

  8. }

  9. public void setPass_word(String pass_word){

  10. this.pass_word=pass_word;

  11. }

  12.  
  13. }

原sql

select user_name,pass_word from demo;

这句sql在数据库可以查到数据,但是使用mybatis的实体类查询就查不到了。

解决方法

在实体类中增加以下两个set方法并把sql改为

select user_name as username,pass_word as password from demo;

使用实体类查询数据库实际上就是一个set的过程只需要把每个属性增加一个set方法就好了

 
  1. public void setUsernaem(String user_name){

  2. this.user_name=user_name;

  3. }

  4. public void setPassword(String pass_word){

  5. this.pass_word=pass_word;

  6. }

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 应用中,可以使用 Jackson 库来进行 JSON 序列化和反序列化。默认情况下,Jackson 库会根据 Java 对象属性命名规范来生成 JSON 字段名,而在 JavaScript 中,对象属性一般使用小写字母命名。 为了解决这个问题,可以使用 Jackson 库中的命名策略来改变生成的 JSON 字段名。常用的命名策略有 SnakeCase 命名策略和 KebabCase 命名策略,它们分别将属性名中的大写字母转换为下划线或短横线,并将所有单词转换为小写。这样,在序列化时生成的 JSON 字段名就会符合约定的命名规范。 具体实现方式如下: 1. 在 Spring Boot 应用的配置文件中添加以下配置,将 Jackson 库的命名策略设置为 `LOWER_CASE_WITH_UNDERSCORES`: ```yaml spring: jackson: property-naming-strategy: LOWER_CASE_WITH_UNDERSCORES ``` 2. 在需要进行序列化和反序列化的类上添加 `@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)` 注解,该注解将使用 SnakeCase 命名策略(即将属性名中的大写字母转换为小写,并添加下划线)。 ```java import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) public class MyClass { private String myField; // getter and setter } ``` 这样,在进行序列化时生成的 JSON 字段名就会符合 JavaScript 的小写命名规范。在前端接收到后端返回的 JSON 数据时,也不需要对字段名进行任何转换,可以直接使用小写字母的属性名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值