很多人在使用mybatis的过程中,可能会遇到这种情景:在mapper映射文件中,resultType=" "或者parameterType= " " 引号中要引入某个Bean,这样就要写Bean的全路径名称,而全路径名称是很长的,代码量小了还好说,代码量多了,难免会觉得有些麻烦。
这种情况下,其实是可以给要引入的Bean设置别名的,这样在mapper映射文件中我们只需要在要引入Bean的地方比如文中开头提到resultType=" "或者parameterType= " "中写上设置的别名就可以了,直接减少了我们的代码量,简化了我们的开发过程。设置方式就是在mybatis的配置文件中使用<typeAliases>标签。具体方法如下:
首先,在mybatis-config.xml配置文件中,在<settings><settings/>标签的后面定义一组 <typeAliases><typeAliases/>标签。
PS:<typeAliases><typeAliases/>标签的顺序是一定要紧跟在<settings><settings/>的后面,否则启动项目时会报DTD解析的错~。
示例:
<configuration>
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="logImpl" value="LOG4J"/>
<setting name="defaultStatementTimeout" value="6000"/>
<!-- 使用驼峰命名法转换字段。 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
<setting name="logImpl" value="SLF4J" />
</settings>
<!-- 配置 typeAliases 设置Bean别名-->
<typeAliases>
<package name=" "/> <typeAlias type="" alias=""/>
</typeAliases>
</configuration>
第二步就是根据自己的需求,选择给Bean指定别名的方式,这里有两种方式。
第一种是给某个指定的Bean设置别名。
设置方式是在<typeAliases></typeAliases>中使用<typeAlias type="" alias=""/>。type参数后面写要指定的Bean的全路径名称,alias参数后面写要设置的别名。
例如要把 cn.qwb.User 这个Bean设置别名为user,可配置为 <typeAlias type=" cn.qwb.User" alias="user" />
第二种就是给一个包下的所有Bean设置默认别名,即批量设置Bean别名。
设置方式是在<typeAliases></typeAliases>中使用<package name=" "/>。name参数后面写上一个包的全路径,该路径下所有的Bean都将被默认设置一个别名,这里mybatis默认设置的别名为Bean所在包的最后一级路径下的文件名,也就是这个Bean本身的名字。
例如要把 cn.qwb.User 和 cn.qwb.Info 统一设置别名,可配置为 <package name=" cn.qwb "/> ,这样 cn.qwb.User 和 cn.qwb.Info的别名分别默认设置为 User 与 Info。
如果想对批量设置的Bean别名中某一个Bean单独设置一个别的别名,可以使用mybaits的@Alias注解。
具体操作:在要单独设置别名的Bean中加上@Alias注解。
例如 要把cn.qwb.Info 设置一个别名叫做 china ,操作如下
@Alias(value="china") //使用@Alias注解设置别名
public class Info {
private String name;
private String age;
private String idCard;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
}
以上便是如何在使用mybatis时给Bean设置别名的方法。
最后有两点需要注意:
1.不论使用哪种设置别名的方式,<typeAliases><typeAliases/>标签在mybatis的配置文件中一定要有,而且一定要紧跟<settings></settings>之后(如果<settings></settings>存在的话)。
2.如果要使用@Alias注解,注意一定要在<typeAliases><typeAliases/>中配置<package name=" "/> ,因为这个注解的原理是重命名mybatis默认设置的Bean别名,所以一定要有<package name=" "/>,否则启动项目时会报xxx.mapper中找不到类的异常。
以上便是今天对<typeAliases>标签的学习记录,因本人水平有限,文中如有不妥,请各位朋友批评指出,谢谢~