首页 > 数据库 >在数据库字段命名格式和实体类属性命名格式不一致的情况下,通过配置 MyBatis 的通用 Mapper 并结合 Example 模式,高效地管理字段映射关系并完成数据库操作(二)

在数据库字段命名格式和实体类属性命名格式不一致的情况下,通过配置 MyBatis 的通用 Mapper 并结合 Example 模式,高效地管理字段映射关系并完成数据库操作(二)

时间:2024-11-29 16:21:49浏览次数:7  
标签:Mapper 实体类 映射 Column 数据库 注解 命名 格式 Example

如果在 MyBatis 的通用 Mapper 中结合 Example 模式查询时,未自动使用实体类中 @Column 注解定义的字段映射,可能的原因是配置或使用方式上存在一些问题。以下是解决方案和注意事项:


原因分析

  1. 通用 Mapper 的 @Column 支持: 通用 Mapper 支持通过 @Column 注解映射字段和数据库列,但要求配置正确,并且在查询时按规范使用通用 Mapper 的方法(如 selectByExample)。

  2. 未启用 @Column 注解映射: 如果你的项目没有显式支持 JPA 注解(@Column),例如没有正确导入 jakarta.persistencejavax.persistence 包,@Column 注解可能被忽略。

  3. Example 模式使用了动态字段匹配: 通用 Mapper 的 Example 模式会根据实体类的字段名称生成 SQL。如果字段名称和数据库列名不一致,而未启用 @Column 注解,可能导致字段无法正确映射。


解决方案

1. 确保依赖正确引入

确保项目中正确引入了 JPA 注解的依赖(jakarta.persistencejavax.persistence)。以下是常见的 Maven 依赖:

<dependency>
    <groupId>jakarta.persistence</groupId>
    <artifactId>jakarta.persistence-api</artifactId>
    <version>3.1.0</version> <!-- 或最新版本 -->
</dependency>

2. 确保实体类正确配置了 @Column 注解

在实体类中,明确使用 @Column 注解定义数据库列名:

import jakarta.persistence.Column;
import jakarta.persistence.Table;

@Table(name = "user") // 指定表名
public class User {

@Column(name = "id_no") // 数据库列名
private String idNo;

@Column(name = "user_name")
private String userName;

// Getter 和 Setter
public String getIdNo() {
    return idNo;
}

public void setIdNo(String idNo) {
    this.idNo = idNo;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

}


3. 检查通用 Mapper 的配置

确保项目中正确配置了通用 Mapper:

  • 通用 Mapper 默认支持 @Column 注解,但需要确保 Mapper 接口继承了 Mapper 或其子接口。例如:
import tk.mybatis.mapper.common.Mapper;

public interface UserMapper extends Mapper<User> {
}


4. 使用 Example 模式的正确方式

在使用 Example 模式时,直接通过实体类字段指定条件,通用 Mapper 会自动解析 @Column 注解并生成正确的 SQL。

  • 示例

    Example example = new Example(User.class);
    Example.Criteria criteria = example.createCriteria();
    

    // 按字段名添加条件
    criteria.andEqualTo("idNo", "123456"); // 自动映射到数据库列 id_no

    List<User> users = userMapper.selectByExample(example);

  • 生成的 SQL

    SELECT id_no, user_name FROM user WHERE id_no = '123456';
    

5. 如果仍未生效,考虑启用驼峰映射

如果 @Column 注解未生效,且实体类字段和数据库列名符合驼峰命名规则,可以启用 MyBatis 的驼峰映射:

  • 在配置文件中设置
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
    

此时,即使不使用 @Column 注解,字段 idNo 也会自动映射到数据库的 id_no 列。


6. 使用 example.setUseColumn(true) 强制启用 @Column 支持

在通用 Mapper 的 Example 对象中,可以通过 setUseColumn(true) 方法强制启用 @Column 支持:

  • 示例

    Example example = new Example(User.class);
    example.setUseColumn(true); // 强制使用 @Column 注解
    

    Example.Criteria criteria = example.createCriteria();
    criteria.andEqualTo("idNo", "123456"); // 会解析为 id_no

    List<User> users = userMapper.selectByExample(example);

  • 生成的 SQL

    SELECT id_no, user_name FROM user WHERE id_no = '123456';
    

总结

如果通用 Mapper 的 Example 模式查询时未自动使用 @Column 注解,可以通过以下步骤解决:

  1. 确保项目正确引入 JPA 注解依赖。
  2. 在实体类中正确配置 @Column 注解。
  3. 使用 Example.setUseColumn(true) 强制启用 @Column 支持。
  4. 配置 MyBatis 的全局驼峰映射作为补充。

通常情况下,只要配置正确,通用 Mapper 能很好地支持 @Column 注解映射字段与数据库列名。

标签:Mapper,实体类,映射,Column,数据库,注解,命名,格式,Example
From: https://www.cnblogs.com/Will-Chang/p/18577006

相关文章

  • 客户端WinForm实现Form表单格式自定义
    usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.ComponentModel.Design;usingSystem.ComponentModel.Design.Serialization;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;using......
  • Springboot高职院校实践教学与就业跟踪085m6(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,企业,企业信息,招聘信息,应聘信息,实习实践,问卷调查,学生答卷开题报告内容一、研究背景与意义随着我国经济的快速发展和产业结构的不断优化升级,高等职业......
  • hhdb数据库介绍(10-14)
    配置配置校验配置校验主要为计算节点相关配置提供校验功能,防止人为错误设置或线下修改计算节点相关配置导致运行异常等问题出现。容灾模式说明:集群开启容灾模式时,配置校验相关逻辑说明请结合跨机房容灾部署文档中的配置校验章节。功能入口:在关系集群数据库可视化管理平台页面......
  • hhdb数据库介绍(10-15)
    配置集群元数据备份还原集群元数据指的是计算节点配置库数据与配置文件。管理平台提供为计算节点手动或定时备份元数据的功能,以防重要配置数据丢失或损坏导致无法恢复。集群元数据备份手动备份远程备份为提高备份的元数据的安全性,本功能还提供将备份的元数据同时拷贝到......
  • hhdb数据库介绍(10-17)
    配置服务器服务器菜单可配置集群中所有服务器的SSH信息,方便管理平台对服务器进行各种状态监控。此外也支持添加集群外的服务器到管理平台中进行监控。自动获取服务器IP服务器页面会自动显示集群内所有的服务器IP以及服务器中关联的服务程序。单节点集群模式管理平台自动获取......
  • hhdb数据库介绍(10-16)
    配置存储节点参数存储节点参数通过可视化方式将部分无需重启的参数展示在管理平台上,方便运维人员进行管理。目前支持存储节点实例和计算节点配置库实例的参数管理。参数列表参数列表展示存储节点信息、版本信息、参数名称、参数当前值、参数默认值、参数有效值范围、参数生效......
  • hhdb数据库介绍(10-9)
    配置配置是管理平台为计算节点可视化配置所开发的功能,包括配置数据节点、存储节点、存储节点组、逻辑库、分片规则、表信息、数据库用户、计算节点等参数。同时配套设置了配置参数的校验与备份恢复的辅助功能。节点管理节点管理菜单主要为用户提供存储节点组、数据节点、存储节......
  • hhdb数据库介绍(10-8)
    首页管理平台通过数据可视方式在首页功能中实时展示计算节点集群的数据量、访问流量、集群组件状态、告警事件、安全防控等用户关心的信息。集群安全邮件通知:根据通知设置中监控开关是否打开判断,分为:全部开启、未开启、部分开启,点击跳转到通知设置页面系统定时检测:根据定时......
  • hhdb数据库介绍(10-10)
    配置节点管理切换规则配置切换规则可为用户提供数据节点高可用性。计算节点会定时检测存储节点的可用情况,一旦检测到存储节点发生故障,计算节点会依据配置的切换规则自动切换到备用的存储节点上,以保障服务的稳定性和可靠性。用户也可以进行手动切换。功能入口:在管理平台页面中......
  • hhdb数据库介绍(10-11)
    配置逻辑库功能说明:逻辑库是客户端程序连接计算节点服务器后,可以访问的数据库,描述数据库表的集合,类似于直接连接存储节点实例后,看到的一个数据库。功能入口:在关系集群数据库可视化管理平台页面中选择配置->逻辑库。在逻辑库页面,输入逻辑库名称,点击“搜索”,即可搜索到相应的......