下面是 “Mybatis-Plus 映射匹配兼容性的问题解决”的完整攻略:
1. 问题背景
在使用 Mybatis-Plus 进行二次封装的时候,常常会出现如下问题:
当我们的数据库表中含有下划线时,Mybatis-Plus 默认的驼峰命名映射策略就会失效,例如:user_info 表会自动被映射成 UserInfo 而非 UserInfo。这时,就需要我们手动开启驼峰命名策略,否则会出现SQL 执行失败的问题。
2. 解决方案
需要在 Mybatis-Plus 配置中进行以下配置,开启 Mybatis-Plus 的驼峰命名规则
# 开启驼峰命名策略
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
3. 示例一
假设现在我们有一个 user_info 表,其中有字段为 user_name 和 user_age,对应的实体类为:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo {
/** 主键 */
@TableId(type = IdType.AUTO)
private Integer id;
/** 用户名 */
private String userName;
/** 用户年龄 */
private Integer userAge;
/** 用户邮箱 */
private String userEmail;
/** 版本号 */
@Version
private Integer version;
/** 逻辑删除位 */
private Integer deleted;
}
接下来进行数据操作,例如使用 Mybatis-Plus 的 baseMapper 查询 user_info 表,如下:
@Repository
public interface UserInfoMapper extends BaseMapper<UserInfo> {
@Select("select * from user_info;")
List<UserInfo> queryAll();
}
由于我们已经在 Mybatis-Plus 配置文件中开启了驼峰命名规则,此时会自动映射 user_info 表中的字段 user_name 和 user_age 到实体类的 userName 和 userAge 属性中。而 userEmail 字段不会被映射到实体类中。
4. 示例二
现在我们再加上一个 order_info 表,其中有字段为 order_time 和 order_price,对应的实体类为:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrderInfo {
/** 主键 */
@TableId(type = IdType.AUTO)
private Integer id;
/** 订单时间 */
private Date orderTime;
/** 订单价格 */
private Integer orderPrice;
/** 逻辑删除位 */
private Integer deleted;
}
同样,在使用 baseMapper 进行查询操作时,我们已经开启了驼峰命名规则,查询代码如下:
@Repository
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
@Select("select * from order_info;")
List<OrderInfo> queryAll();
}
在这个例子中,order_info 表中的字段 order_time 和 order_price 会自动匹配到实体类中的 orderTime 和 orderPrice 属性,而 id 和 deleted 字段不需要进行手动匹配。
5. 总结
以上就是使用 Mybatis-Plus 解决映射匹配兼容性问题的攻略,所需配置项一般就是:mybatis.configuration.map-underscore-to-camel-case=true
,开启驼峰命名匹配规则后,Mybatis-Plus 会自动将数据库中下划线分隔的字段名,映射到对应实体类的驼峰命名的属性中,使得使用更加方便。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis-Plus 映射匹配兼容性的问题解决 - Python技术站