全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 6 分钟 ✍️ juanwangdev

typeAliases 类型别名

typeAliases 用于为 Java 类型设置简短的别名,避免在 Mapper XML 中反复书写冗长的全限定类名。

为什么需要类型别名

不使用别名时,XML 中需要写完整的类名:

XML
<select id="selectUser" resultType="com.example.entity.User">
    SELECT * FROM user WHERE id = #{id}
</select>

<insert id="insertUser" parameterType="com.example.entity.User">
    INSERT INTO user (username, email) VALUES (#{username}, #{email})
</insert>

使用别名后,代码变得简洁:

XML
<select id="selectUser" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

<insert id="insertUser" parameterType="User">
    INSERT INTO user (username, email) VALUES (#{username}, #{email})
</insert>

内置类型别名

MyBatis 为常见 Java 类型提供了内置别名:

基本类型

别名Java 类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean

包装类型

别名Java 类型
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

数组类型

别名Java 类型
byte[]_byte[]
long[]_long[]
short[]_short[]
int[]_int[]
integer[]Integer[]
double[]_double[]
float[]_float[]
boolean[]_boolean[]
String[]string[]

自定义单个类型别名

为单个类指定别名:

XML
<typeAliases>
    <typeAlias type="com.example.entity.User" alias="User"/>
    <typeAlias type="com.example.entity.Order" alias="Order"/>
    <typeAlias type="com.example.entity.Product" alias="Product"/>
</typeAliases>

配置后在 XML 中使用:

XML
<select id="selectUser" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

包扫描自动设置别名

当实体类较多时,可以指定包名进行批量扫描:

XML
<typeAliases>
    <package name="com.example.entity"/>
</typeAliases>

扫描规则:

  • MyBatis 会扫描指定包下所有的类
  • 自动将类名首字母小写作为别名
  • 例如 User 的别名为 userOrderItem 的别名为 orderItem

在 XML 中使用(注意是小写):

XML
<select id="selectUser" resultType="user">
    SELECT * FROM user WHERE id = #{id}
</select>

@Alias 注解自定义别名

使用包扫描时,可以通过 @Alias 注解自定义别名:

Java
package com.example.entity;

import org.apache.ibatis.type.Alias;

@Alias("myUser")
public class User {
    private Integer id;
    private String username;
    // 其他字段
}

配置包扫描:

XML
<typeAliases>
    <package name="com.example.entity"/>
</typeAliases>

此时 User 的别名为 myUser 而不是默认的 user

XML
<select id="selectUser" resultType="myUser">
    SELECT * FROM user WHERE id = #{id}
</select>

多包扫描

项目结构复杂时,可以扫描多个包:

XML
<typeAliases>
    <package name="com.example.entity"/>
    <package name="com.example.dto"/>
    <package name="com.example.vo"/>
</typeAliases>

别名大小写

MyBatis 对别名的查找是不区分大小写的:

XML
<!-- 以下三种写法均可 -->
<select id="selectUser" resultType="User">
<select id="selectUser" resultType="user">
<select id="selectUser" resultType="USER">

推荐:统一使用类名首字母小写的形式,保持代码风格一致。

别名冲突处理

当不同包下存在同名类时,包扫描会导致别名冲突:

Java
// com.example.entity.User
public class User { }

// com.example.dto.User
public class User { }

解决方式:

  • 使用 @Alias 注解区分
  • 或者改用全限定类名
Java
@Alias("entityUser")
public class User { }

@Alias("dtoUser")
public class User { }

完整配置示例

XML
<configuration>
    <typeAliases>
        <!-- 单个类型别名 -->
        <typeAlias type="com.example.entity.PageResult" alias="PageResult"/>

        <!-- 包扫描 -->
        <package name="com.example.entity"/>
        <package name="com.example.dto"/>
    </typeAliases>

    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

Mapper XML 中使用:

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">

    <!-- resultType 使用别名 -->
    <select id="selectById" resultType="user">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <!-- parameterType 使用别名 -->
    <insert id="insert" parameterType="user">
        INSERT INTO user (username, email) VALUES (#{username}, #{email})
    </insert>

    <!-- 返回列表使用别名 -->
    <select id="selectAll" resultType="list">
        SELECT * FROM user
    </select>

</mapper>

要点总结

  • 内置别名覆盖了基本类型、包装类型、集合类型等常用类型
  • typeAlias 可以为单个类指定别名
  • package 可以批量扫描包,默认别名为类名首字母小写
  • @Alias 注解可以覆盖默认别名
  • 别名查找不区分大小写,但推荐统一风格
  • 多包存在同名类时,使用 @Alias 或全限定类名避免冲突

📝 发现内容有误?点击此处直接编辑

← 上一篇 settings 全局设置
下一篇 → delete 删除语句
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库