目录

三种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;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐