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 + '\'' +
                '}';
    }
}
View Code

 

映射文件:

<?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 类型内建的类型别名

注意:为了应对原始类型的命名重复,采取了特殊的命名风格。

 

 

 

posted @ 2020-03-15 16:16  白熊啊  阅读(1193)  评论(0编辑  收藏  举报