当前位置: 首页 > news >正文

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

目录

三种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 mapperPUBLIC "-//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 {@Autowiredprivate NameMapper nameMapper;/*** 通过起别名的方式*/@Testpublic void testGetName(){System.out.println("+=====================================");User user = nameMapper.queryUserByAlias(1);System.out.println(user.toString());}/*** 通过注解的方式*/@Testpublic void testGetNameByAnnotation(){System.out.println("+=====================================");User user = nameMapper.queryUserByAnnotation(2);System.out.println(user.toString());}/*** 通过resultMap的方式*/@Testpublic 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.mrgr.cn/news/27603.html

相关文章:

  • Chrome 浏览器开启打印模式
  • 【Goland】——Gin 框架简介与安装
  • Ceph 中PG与PGP的概述
  • 在uniapp中使用canvas封装组件遇到的坑,数据被后面设备覆盖,导致数据和前面的设备一样
  • Mac解压包安装MongoDB8并设置launchd自启动
  • 如何查看库函数的描述、定义以及所需要的头文件
  • java项目之基于工程教育认证的计算机课程管理平台(源码+论文)
  • F5设备绑定EIP
  • 【Vue】2
  • 国风编曲:了解国风 民族调式 五声音阶 作/编曲思路 变化音 六声、七声调式
  • Qt:懒汉单例(附带单例使用和内存管理)
  • 【软考】扩充的ER模型
  • Autosar E2E通信保护简介
  • QT添加图标标题和打包项目
  • 差分算法搞不懂?这篇文章带你飞
  • 通过 Docker 部署 WordPress 服务器
  • 【漏洞复现】用友 U8-cloud ActionServlet sql注入漏洞
  • lvs-dr模式实验详解
  • python注释知识点及用法讲解
  • 结构体指针
  • 计算机专业毕业设计选题指南:避开这些坑,让你轻松毕业-附选题推荐(精选题目汇总大全)
  • 【leetcode】树形结构习题
  • 小阿轩yx-案例:Zabbix监控kubernetes云原生环境
  • 安全区域边界等保测评
  • 51单片机-系列-单片机基础知识入门流水灯
  • 1.使用 VSCode 过程中的英语积累 - File 菜单(每一次重点积累 5 个单词)