三种mybatis表的列名和对象属性名不一致处理方法

news2024/12/28 22:52:45

目录

三种mybatis表的列名和对象属性名不一致处理方法

1.使用 resultMap 映射

1)mapper

2)mapper.xml

3)测试代码

4)测试结果

​编辑

2.使用别名

1)mapper

2)mapper.xml

3)测试代码

4)测试结果

3.使用 @Results 注解

1)mapper

2)mapper.xml

3)测试代码

4)测试结果

附录

1)NameMapper文件

2)NameMapper.xml文件

3)NameMapperTest文件

4)user表结构


三种mybatis表的列名和对象属性名不一致处理方法

        在MyBatis中,当数据库表的列名与Java对象的字段名不一致时,可以通过多种方式来处理这种情况。以下是几种常用的方法:

1.使用 resultMap 映射

        resultMap 是 MyBatis 提供的一个非常强大的映射机制,可以用来定义复杂的映射关系。使用 resultMap 可以解决列名和字段名不一致的问题。

1)mapper

/**
 * 通过ResultMap方式
 */
User queryUserByResultMap(int id);

2)mapper.xml

<!--定义ResultMap-->
<resultMap id="user" type="org.xiji.enty.User">
    <!--定义主键id映射-->
    <id property="id" column="id"/>
    <!--定义名字映射-->
    <result property="username" column="username"/>
    <!--定义密码映射-->
    <result property="password" column="password"/>
    <!--定义信息映射-->
    <result property="userInfo" column="user_info"/>
</resultMap>

.

<!--通过ResultMap处理表名和列名不一致的情况-->
<select id="queryUserByResultMap" resultMap="user">

    select * from user where id=#{id}
</select>

3)测试代码

/**
 * 通过resultMap的方式
 */
@Test
public void testGetNameByResultMap()
{
    System.out.println("+=====================================");
    User user = nameMapper.queryUserByResultMap(3);
    System.out.println(user.toString());

}

4)测试结果

2.使用别名

        在 SQL 查询语句中使用别名来匹配 Java 字段名。

1)mapper

/**
 * 通过sql起别名的方式
 */
User queryUserByAlias(int id);

2)mapper.xml

<!--通过起别名的方式处理列名与对象名不一致的情况-->
<select id="queryUserByAlias" resultType="org.xiji.enty.User">
    select id,username,password,user_info as userInfo from user where id=#{id}
</select>

3)测试代码

/**
 * 通过起别名的方式
 */
@Test
public void testGetName()
{
    System.out.println("+=====================================");
    User user = nameMapper.queryUserByAlias(1);
    System.out.println(user);
    System.out.println(user.toString());


}

4)测试结果

3.使用 @Results 注解

        如果你使用的是 MyBatis 的注解风格,可以通过 @Results 注解来指定列名和字段名的对应关系。

1)mapper

 * 通过注解的方式@Results
 */
@Select("select * from user where id=#{id}")
@Results(
        {
                @Result(column = "id",property = "id"),
                @Result(column = "username",property = "username"),
                @Result(column = "password",property = "password"),
                @Result(column = "user_info",property = "userInfo")
        }

)
User queryUserByAnnotation(int id);

2)mapper.xml

这个是使用mybatis注解风格编写sql,没有xml

3)测试代码

/**
 * 通过注解的方式
 */
@Test
public void testGetNameByAnnotation()
{
    System.out.println("+=====================================");
    User user = nameMapper.queryUserByAnnotation(2);
    System.out.println(user.toString());

}

4)测试结果

附录

1)NameMapper文件

package org.xiji.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.xiji.enty.User;

@Mapper
public interface NameMapper {
    /**
     * 通过ResultMap方式
     */
    User queryUserByResultMap(int id);

    /**
     * 通过sql起别名的方式
     */
    User queryUserByAlias(int id);

    /**
     * 通过注解的方式@Results
     */
    @Select("select * from user where id=#{id}")
    @Results(
            {
                    @Result(column = "id",property = "id"),
                    @Result(column = "username",property = "username"),
                    @Result(column = "password",property = "password"),
                    @Result(column = "user_info",property = "userInfo")
            }

    )
    User queryUserByAnnotation(int id);
}

2)NameMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.xiji.mapper.NameMapper">
    <!--定义ResultMap-->
    <resultMap id="user" type="org.xiji.enty.User">
        <!--定义主键id映射-->
        <id property="id" column="id"/>
        <!--定义名字映射-->
        <result property="username" column="username"/>
        <!--定义密码映射-->
        <result property="password" column="password"/>
        <!--定义信息映射-->
        <result property="userInfo" column="user_info"/>
    </resultMap>


    <!--通过起别名的方式处理列名与对象名不一致的情况-->
    <select id="queryUserByAlias" resultType="org.xiji.enty.User">
        select id,username,password,user_info as userInfo from user where id=#{id}
    </select>

    <!--通过ResultMap处理表名和列名不一致的情况-->
    <select id="queryUserByResultMap" resultMap="user">

        select * from user where id=#{id}
    </select>



</mapper>

3)NameMapperTest文件

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.xiji.enty.User;
import org.xiji.mapper.NameMapper;

@SpringJUnitConfig(locations = {"classpath:springConfig.xml"})
public class NameMapperTest {

    @Autowired
    private NameMapper nameMapper;

    /**
     * 通过起别名的方式
     */
    @Test
    public void testGetName()
    {
        System.out.println("+=====================================");
        User user = nameMapper.queryUserByAlias(1);
        System.out.println(user.toString());


    }

    /**
     * 通过注解的方式
     */
    @Test
    public void testGetNameByAnnotation()
    {
        System.out.println("+=====================================");
        User user = nameMapper.queryUserByAnnotation(2);
        System.out.println(user.toString());

    }

    /**
     * 通过resultMap的方式
     */
    @Test
    public void testGetNameByResultMap()
    {
        System.out.println("+=====================================");
        User user = nameMapper.queryUserByResultMap(3);
        System.out.println(user.toString());

    }

}

4)user表结构

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户名字',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户密码',
  `userInfo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户信息',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈vue2.0与vue3.0的区别(整理十六点)

目录 1. 实现数据响应式的原理不同 2. 生命周期不同 3. vue 2.0 采用了 option 选项式 API&#xff0c;vue 3.0 采用了 composition 组合式 API 4. 新特性编译宏 5. 父子组件间双向数据绑定 v-model 不同 6. v-for 和 v-if 优先级不同 7. 使用的 diff 算法不同 8. 兄弟组…

浅谈住房城乡建设部科技创新平台布局重点方向

最近住房建设部组织开展住房城乡建设部科技创新平台&#xff08;以下简称部科技创新平台&#xff09;申报工作。详细内容见住房城乡建设部科技创新平台开始申报了 (qq.com)。在这里有4大方向共15个课题。内容见下图&#xff1a; 虽然我是做技术的&#xff0c;但是如何体现创新还…

Linux基础3-基础工具3(make,makefile,gdb详解)

上篇文章&#xff1a;Linux基础3-基础工具2&#xff08;vim详解&#xff0c;gcc详解&#xff09;-CSDN博客 本章重点&#xff1a; 1.自动化构建工具make,makefile 2.linux调试工具gdb 目录 一. 自动化构建工具make,makefile 1.1 make使用 1.2 使用make注意点 a. make和文件时…

【演化博弈论】:双方演化博弈的原理与过程

目录 一、演化博弈的原理1. 基本概念2. 参与者的策略3.演化过程 二、MATLAB 代码解读&#xff08;博弈参与主体&#xff08;双方&#xff09;策略选择的动态演化讨程&#xff09;三、MATLAB 代码解读&#xff08;博弈主体随着时间策略选择的动态演化讨程&#xff09;四、结论 演…

Mac 上,终端如何开启 proxy

前提 确保你的浏览器可以访问 google&#xff0c;就是得先有这个能力 步骤 查看网络的 http/https 还有 socks5 的 port配置 .zshrc 查看 port 点击 wifi 设置 以我的为例&#xff0c;我的 http/https 都是 7890&#xff0c; socks5 是 7891 查看代理的port 以我的软件…

linux网络编程1

24.9.16学习目录 一.TCP/IP协议简介1.TCP/IP的分层结构2.协议的简介 二、MAC地址和IP地址1.网卡2.MAC地址3.IP地址&#xff08;1&#xff09;IP地址的分类&#xff08;2&#xff09;IP地址的特点&#xff08;3&#xff09;回环IP地址 3.子网掩码4.端口&#xff08;1&#xff09…

【C语言】分支和循环专题应用

分支和循环专题应用 1、随机数生成1.1rand1.2 srand函数介绍1.3 time函数介绍1.4 设置随机数的范围 2、猜数字游戏的代码及实现 通过了分支和循环的介绍学习之后&#xff0c;我们可以运用分支和循环语句写出一些有趣的代码了&#xff0c;让我们来一起探索吧&#xff01; 写一个…

‌PhotoZoom Pro 9‌和‌PhotoZoom Classic 9‌都提供了多项新功能

​PhotoZoom 9是一款划时代的、技术上产生革命性影响的数码图片放大工具。该软件使用了全新的S-Spline技术&#xff08;拥有自动调节、领先的差值算法等技术及亮点&#xff09;&#xff0c; 开创了图片放大技术的新领域&#xff0c;采用更为领先的优化算法&#xff0c;对不断放…

Linux进阶命令-sedsplit

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 经过上一章Linux日志的讲解&#xff0c;我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令&am…

Renesas R7FA8D1BH (Cortex®-M85)控制ISLS29035

目录 概述 1 ISL29035芯片介绍 1.1 ISL29035特征 1.2 ISL29035工作电路 1.3 ISL29035工作时序分析 1.4 ISL29035相关的寄存器 1.4.1 COMMAND-1( 0x00 ) 1.4.2 COMMAND-11&#xff08;0x01&#xff09; 1.4.3 DATA寄存器&#xff08;0x02和0x03&#xff09; 1.4.4 中断…

2分钟解决联想电脑wifi功能消失 网络适配器错误代码56

分钟解决联想电脑wifi功能消失 网络适配器错误代码56 现象 原因 电脑装了虚拟机&#xff0c;导致网络适配器冲突。我的电脑是装了vm虚拟机&#xff0c;上次更新系统后wifi图标就消失了。 解决方案 1、先卸载虚拟机 2、键盘按winr&#xff0c;弹出运行窗口&#xff0c;输入“…

系统架构设计师 需求分析篇一

&#x1f4d8; 结构化分析SA 思想 自顶向下&#xff1a;像剥洋葱一样&#xff0c;层层深入&#xff0c;大问题拆成小问题&#xff0c;再拆成更小的问题。 核心模型 数据字典 &#x1f4d4;&#xff1a;记录数据元素的点点滴滴&#xff0c;从属性到使用方式&#xff0c;无所…

QUIC的丢包处理

QUIC的重试数据包&#xff08;Retry Packet&#xff09;为什么会触发重启另一个连接 安全性考量 防止重放攻击 重试数据包&#xff08;Retry Packet&#xff09;是在初始握手过程中由服务端发送给客户端&#xff0c;用于验证客户端的IP地址&#xff0c;以防止重放攻击。 在一…

STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)

在研究声音、电力或任何形式的波形时&#xff0c;我们常常需要穿过表面看本质。FFT&#xff08;快速傅里叶变换&#xff09;就是这样一种强大的工具&#xff0c;它能够揭示隐藏在复杂信号背后的频率成分。本文将带你走进FFT的世界&#xff0c;了解它是如何将时域信号转化为频域…

【Android】【Compose】实现列表数据添加

序言 在使用列表的时候&#xff0c;以前是使用 Layout 布局里面添加Recyclerview进行列表的显示&#xff0c;但是在Compose里面&#xff0c;是没有这个Recyclerview使用的&#xff0c;那Compose怎么实现列表数据呢&#xff1f; 使用 【LazyColumn】 首先创建一个Compose项目…

java,深拷贝和浅拷贝

在 Java 中&#xff0c;深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是对象拷贝的两种方式&#xff0c;主要区别在于它们如何处理对象的内部引用。 目录 一、浅拷贝&#xff08;Shallow Copy&#xff09; 实现方式 二、深拷贝&…

国际商城系统怎么弄 跨境电商商城怎样上线

国际商城系统一般涉及多个关键步骤。首先&#xff0c;需要选择合适的平台或开发工具&#xff0c;如商淘云国际电商系统或自定义开发。其次&#xff0c;系统应支持多语言、多币种以及国际支付网关&#xff0c;以满足全球客户的需求。第三&#xff0c;确保系统具有强大的物流和配…

推荐5款AI论文大纲生成器,一键极速生成!

在当今学术研究和写作领域&#xff0c;AI论文大纲生成器的出现极大地提高了写作效率和质量。以下是五款功能强大且全面的AI论文大纲生成器推荐&#xff1a; 一、千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和自然语言处理技术的AI写作助手&#xff0c;旨在帮助用户…

新160个crackme - 058-CZG-crackme1

运行分析 按下OK键后&#xff0c;程序退出 PE分析 C程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida函数栏发现winMain(x,x,x,x)&#xff0c;即打开窗口&#xff0c;双击函数跟进 继续跟进 双击DialogFunc函数&#xff0c;这个是窗口逻辑 继续跟进sub_401090函…

数据结构----栈和队列

&#xff08;一&#xff09;栈 1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First …