Mybatis-Plus 映射匹配兼容性的问题解决

下面是 “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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Tomcat启动核心流程示例详解

    Tomcat启动核心流程示例详解 简介 Tomcat 是一个开源的 Web 应用服务器,是最流行的 Java Web 应用服务器之一。在开发和部署 Web 应用时,Tomcat 的启动过程是非常重要的,因为它决定了 Web 应用的运行状态以及访问方式等重要因素。下面将详细讲解 Tomcat 启动的核心流程,并提供两个示例来帮助理解。 启动流程 Tomcat …

    Java 2023年5月19日
    00
  • 出现次数超过一半(50%)的数

    第一步: 思路分析 本题要求我们找出出现次数超过一半的数,可以采用摩尔投票法进行求解。摩尔投票法的思路是,每次从数组中取出两个不同的数之后,将它们同时删除,直到数组中只剩下一个数或者多个相同的数。此时剩下的就是出现次数超过一半的数。 第二步: 代码实现 采用摩尔投票法实现代码如下: int majorityElement(vector<int>&…

    Java 2023年6月16日
    00
  • LibrarySystem图书管理系统开发(一)

    LibrarySystem图书管理系统开发(一) 概述 本文介绍了一种设计和开发图书管理系统的方法,该系统使用Python编程语言和Django框架开发。 需求 我们的图书管理系统需要具备以下功能: 添加/编辑/删除图书 添加/编辑/删除图书分类 借阅/归还图书 搜索图书 管理员登录 设计 数据库设计 我们需要至少两个相关的数据库表来存储数据: Book 和…

    Java 2023年5月30日
    00
  • Spring整合ehCache全过程

    下面我将为您详细讲解Spring整合ehCache全过程的完整攻略,包含以下步骤: 引入依赖: 需要将spring-context-support和ehcache的依赖引入到项目中,pom.xml中的配置如下: <dependencies> <dependency> <groupId>org.springframework…

    Java 2023年5月20日
    00
  • Java Class 加密工具 ClassFinal详解

    Java Class 加密工具 ClassFinal详解 什么是Java Class 加密工具 Java Class 加密工具是一种将Java类文件加密的工具,可以防止被反编译得到源代码,保护Java应用程序的安全性和商业机密。 ClassFinal的使用 ClassFinal是一款免费的Java Class加密工具,支持图形界面和命令行两种方式进行操作。 …

    Java 2023年5月26日
    00
  • java实现注册登录系统

    下面是“Java实现注册登录系统”的完整攻略: 前置知识 在实现注册登录系统之前,需要掌握一些Java基础知识和相关技术。主要包括: Java基础语法(变量、数据类型、控制语句、方法等) Java面向对象编程(类、对象、继承、多态等) JDBC技术(Java连接数据库的技术) Servlet和JSP技术(Java Web开发技术) 实现步骤 创建数据库表格 …

    Java 2023年5月19日
    00
  • Java Apache POI报错“NullArgumentException”的原因与解决办法

    “NotOfficeXmlFileException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 文件格式错误:如果文件不是Office Open XML格式,则可能会出现此异常。例如,可能会尝试读取旧版的Microsoft Office文件或尝试读取其他文件类型。 以下是两个实例: 例1 如果文件格式错误,则可以尝试使用正确…

    Java 2023年5月5日
    00
  • java代码获取数据库表里数据的总数操作

    让我详细讲解一下关于“Java代码获取数据库表里数据的总数操作”的完整攻略。 1. 通过JDBC获取数据总数 1.1. JDBC连接数据库 首先,我们需要使用JDBC连接到数据库。具体步骤如下: // 加载MySQL JDBC Driver Class.forName("com.mysql.jdbc.Driver"); // 声明MySQ…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部