MyBatis 查询数据库操作自定义字段名称

在使用 MyBatis 的 Mapper 进行数据库操作时,是可以使用 SELECT 语句的 字段 AS xx 这种语法的。下面为你详细介绍不同场景下的使用方式。

基于 XML 映射文件的 Mapper

当使用 XML 映射文件来定义 Mapper 时,可以在 SQL 语句里使用 字段 AS xx 语法。

示例代码

Mapper 接口

import java.util.List;
import java.util.Map;

public interface UserMapper {
    List<Map<String, Object>> selectUsersWithAlias();
}

Mapper XML 文件(UserMapper.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="com.example.mapper.UserMapper">
    <select id="selectUsersWithAlias" resultType="java.util.Map">
        SELECT user_id AS id, user_name AS name
        FROM users
    </select>
</mapper>

代码调用示例

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper userMapper = session.getMapper(UserMapper.class);
            List<Map<String, Object>> users = userMapper.selectUsersWithAlias();
            for (Map<String, Object> user : users) {
                System.out.println("ID: " + user.get("id") + ", Name: " + user.get("name"));
            }
        }
    }
}

代码解释
  • 在 UserMapper.xml 文件的 select 语句中,使用 user_id AS id 和 user_name AS name 对字段进行了重命名。
  • resultType="java.util.Map" 表示查询结果会以 Map 的形式返回,其中键为字段名(使用 AS 后的别名),值为字段值。

基于注解的 Mapper

若使用注解来定义 Mapper,同样可以在 SQL 注解里使用 字段 AS xx 语法。

示例代码
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;

public interface UserMapper {
    @Select("SELECT user_id AS id, user_name AS name FROM users")
    List<Map<String, Object>> selectUsersWithAlias();
}

代码解释
  • 在 @Select 注解的 SQL 语句中,使用 AS 关键字对字段进行了重命名。
  • 方法返回类型为 List<Map<String, Object>>,查询结果中的字段名会以 AS 后的别名存在于 Map 中。

映射到实体类

当把查询结果映射到实体类时,AS 后的别名要和实体类的属性名一致,这样 MyBatis 才能正确映射。

示例代码

实体类

public class User {
    private Integer id;
    private String name;

    // Getters and Setters
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Mapper 接口

import java.util.List;

public interface UserMapper {
    List<User> selectUsersWithAlias();
}

Mapper XML 文件(UserMapper.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="com.example.mapper.UserMapper">
    <select id="selectUsersWithAlias" resultType="com.example.entity.User">
        SELECT user_id AS id, user_name AS name
        FROM users
    </select>
</mapper>

代码解释
  • 在 select 语句中使用 AS 关键字将 user_id 重命名为 iduser_name 重命名为 name,与 User 实体类的属性名一致。
  • resultType="com.example.entity.User" 表示查询结果会映射到 User 实体类。