Mybatis 别名

内容纲要

用途

别名就是完整的类名(即包含完整包名的类名)的一个简写,可以在 mybatis 的 sql 映射文件里用别名来代替完整的类名,简化书写

定义别名

在 mybatis 配置文件里使用 typeAlias 节点来定义别名,示例如下

<typeAliases>
    <typeAlias alias="Menu" type="com.refusea.domain.entity.Menu" />
</typeAliases>

另一种方法是定义整个包的所有类的别名

<typeAliases>
    <package name="com.refusea.domain.entity"/>
</typeAliases>

mybatis 会扫描包下的所有类(不包括内部类和接口),并为每个类设定一个别名

  • 如果该类使用了 @Alias 注解,那么用注解值作为别名
  • 没有使用注解,用这个类的类名(首字母小写)作为别名
  • 如果用 typeAlias 定义了别名,@Alias 注解定义了一个不同的别名?不要问我,我不知道……

使用别名

在 sql 映射文件里,用别名来代替完整的类名,示例如下

<update id="update" parameterType="Menu">
    update T_AUTH_MENU set FNAME=#{name} where FID=#{id}
</update>

预定义的别名

mybatis 已经预先定义了常用类的别名,我们可以直接使用这些别名而不需要定义,同时也要注意,在定义自己的别名时也不要和这些别名冲突

mybatis 预定义了哪些别名呢?

public TypeAliasRegistry() {
  registerAlias("string", String.class);

  registerAlias("byte", Byte.class);
  registerAlias("long", Long.class);
  registerAlias("short", Short.class);
  registerAlias("int", Integer.class);
  registerAlias("integer", Integer.class);
  registerAlias("double", Double.class);
  registerAlias("float", Float.class);
  registerAlias("boolean", Boolean.class);

  registerAlias("byte[]", Byte[].class);
  registerAlias("long[]", Long[].class);
  registerAlias("short[]", Short[].class);
  registerAlias("int[]", Integer[].class);
  registerAlias("integer[]", Integer[].class);
  registerAlias("double[]", Double[].class);
  registerAlias("float[]", Float[].class);
  registerAlias("boolean[]", Boolean[].class);

  registerAlias("_byte", byte.class);
  registerAlias("_long", long.class);
  registerAlias("_short", short.class);
  registerAlias("_int", int.class);
  registerAlias("_integer", int.class);
  registerAlias("_double", double.class);
  registerAlias("_float", float.class);
  registerAlias("_boolean", boolean.class);

  registerAlias("_byte[]", byte[].class);
  registerAlias("_long[]", long[].class);
  registerAlias("_short[]", short[].class);
  registerAlias("_int[]", int[].class);
  registerAlias("_integer[]", int[].class);
  registerAlias("_double[]", double[].class);
  registerAlias("_float[]", float[].class);
  registerAlias("_boolean[]", boolean[].class);

  registerAlias("date", Date.class);
  registerAlias("decimal", BigDecimal.class);
  registerAlias("bigdecimal", BigDecimal.class);
  registerAlias("biginteger", BigInteger.class);
  registerAlias("object", Object.class);

  registerAlias("date[]", Date[].class);
  registerAlias("decimal[]", BigDecimal[].class);
  registerAlias("bigdecimal[]", BigDecimal[].class);
  registerAlias("biginteger[]", BigInteger[].class);
  registerAlias("object[]", Object[].class);

  registerAlias("map", Map.class);
  registerAlias("hashmap", HashMap.class);
  registerAlias("list", List.class);
  registerAlias("arraylist", ArrayList.class);
  registerAlias("collection", Collection.class);
  registerAlias("iterator", Iterator.class);

  registerAlias("ResultSet", ResultSet.class);
}

注意

  • 预定义别名,大小写不敏感
  • 对象类型和原始类型是有区别的,别名不一样

参考文档

mybatis 官方文档

Mybatis 别名

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top
粤ICP备2020114259号 粤公网安备44030402004258