mybatis学习——类型别名(typeAliases)
为什么要用类型别名?
答:类型别名可为 Java 类型设置一个缩写名字。 它仅用于 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.kuang.dao.UserMapper"> <select id="getUserList" resultType="com.kuang.pojo.User"> select * from mybatis.user </select> </mapper>
resultType必须使用全限定类名,这样的名字很长,我们希望简单一点,直接叫User,怎么办呢?这时就可以用类型别名来解决这个问题。
注意:
类型别名是写在核心配置文件mybatis-config.xml中设置的
一、使用类型别名(typeAliases)的两种方式
1.通过<typeAliases>标签下的子标签<typeAlias>给指定的全限定类名取别名
<typeAliases> <typeAlias type="com.kuang.pojo.User" alias="User"/> </typeAliases>
当这样配置时,User 可以用在任何使用 com.kuang.pojo.User的地方。例如:
<?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.kuang.dao.UserMapper"> <select id="getUserList" resultType="User"> //这里使用了别名 select * from mybatis.user </select> </mapper>
2.通过<typeAliases>标签下的子标签<package>指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,例如:
<typeAliases> <package name="com.kuang.pojo"/> </typeAliases>
在没有注解的情况下,会使用首字母小写的非限定类名来作为它的别名(首字母也可以大写。首字母小写是为了区别上边方式一创建的别名,方别程序员读懂代码)。 比如com.kuang.pojo.User 的别名为 user;见下面的例子:
<?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.kuang.dao.UserMapper"> <select id="getUserList" resultType="user"> //此处使用别名 select * from mybatis.user </select> </mapper>
若有注解,则别名为其注解值。见下面的例子:
核心配置文件:
<typeAliases> <package name="com.kuang.pojo"/> </typeAliases>
pojo类:
package com.kuang.pojo; import org.apache.ibatis.type.Alias; @Alias("example") //注意这里,使用了注解来自定义别名 public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
映射文件:
<?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.kuang.dao.UserMapper"> <select id="getUserList" resultType="example"> //此处使用了别名 select * from mybatis.user </select> </mapper>
二、常见的 Java 类型内建的类型别名
注意:为了应对原始类型的命名重复,采取了特殊的命名风格。