mybatis-plus踩坑之下划线驼峰转换

问题儿:对象中包含下划线的字段儿查询不出来

mybatis-plus中,默认开启了下滑线-驼峰转换
会把数据库字段中的下划线自动转换成驼峰形式,然后去匹配实体类对象的字段

online_num -> onlineNum

如果在一个实体类中存在一个带下划线的字段,查询出来为null

 private Integer online_num;

即使用了@TableField()注解去指定映射关系,查询结果也为null

 @TableField("online_num")
 private Integer online_num;

问题就是出现在了驼峰转换这里,因为已经指明了映射关系,所以把驼峰转换关掉就行:
yml:

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false

properties:

mybatis-plus.configuration.map-underscore-to-camel-case=false

但是这里有个问题,你关了自动驼峰转换,所有字段都要通过@TableField()注解去指定映射关系或者在mapper.xml中指定映射关系,这样增加了很多工作量。所以非必要情况下类字段还是不要用_去命名字段,省得麻烦。

实在不行,如果一定要用下划线字段,看看具体的原因是什么:
①如果是序列化或者反序列话需要的话,可以用@JsonProperty和@JsonAlias来解决
②如果是toString需要,那就重写一下Object的toString方法
③其他情况的话,可以加一个字段比如a_b,就加一个aB字段,然后手写一下a_b字段对应的getter,setter,使它们指向aB字段,如果不想转字段就转对象,查询用一个对象,然后对业务一个对象,查询出来后就转成业务对象,奇技淫巧还是很多滴~~
请添加图片描述

  • 25
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
MyBatis-Plus 默认开启了驼峰命名规则,但如果你的 Mapper 接口方法名或 SQL 语句中使用下划线命名法,则需要进行配置。 可以在 MyBatis-Plus 的配置文件中配置全局的映射规则,例如: ```java @Configuration public class MybatisPlusConfig { @Bean public ConfigurationCustomizer configurationCustomizer() { return configuration -> configuration.setObjectWrapperFactory(new MybatisMapWrapperFactory()); } /** * 自定义 Map 转换器 */ public static class MybatisMapWrapperFactory extends DefaultObjectWrapperFactory { @Override public boolean hasWrapperFor(Object o) { return o != null && o.getClass() == Map.class; } @Override public ObjectWrapper getWrapperFor(MetaObject metaObject, Object o) { return super.getWrapperFor(metaObject, new MybatisMap((Map<String, Object>) o)); } } /** * 自定义 Map 实现类 */ public static class MybatisMap extends HashMap<String, Object> { public MybatisMap(Map<String, Object> map) { super(map); } @Override public Object put(String key, Object value) { return super.put(StringUtils.camelToUnderline(key), value); } } } ``` 上述代码中,我们自定义了一个 Map 实现类 `MybatisMap`,用于将 Map 中的 key(字段名)进行驼峰下划线的操作。并在 MyBatis-Plus 配置文件中配置了一个全局的配置器 `ConfigurationCustomizer`,用于将 `MybatisMap` 作为默认的 `ObjectWrapper` 实现类。 这样,我们在 Mapper 中查询的时候,就可以使用驼峰命名规则了。例如: ```java @Select("select id, user_name as userName, password from user where id = #{id}") User selectById(@Param("id") Long id); ``` 注意:上述方式只是一种实现方式,还可以通过其他方式来实现,例如使用 MyBatis-Plus 提供的 `IKeyGenerator` 接口。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值