欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

老司机学习MyBatis之如何使用typeAliases别名和@Alias注解

程序员文章站 2022-06-01 18:58:10
...

一、前言

typeAliases是MyBatis中的别名处理器类,翻译过来就是别名的意思。别名处理器的作用就是把Java类型,给它起一个简单一点的别名,这样我们在XML文件中引入全类名的地方就可以使用别名替代。这样可以减少很多的工作量,节约开发时间。例如下面我们使用的是全类名:

老司机学习MyBatis之如何使用typeAliases别名和@Alias注解

现在我们要做的就是给他取一个别名。

二、案例

修改mybatis-config.xml核心配置文件

<!-- mybatis-config.xml增加别名处理 -->
<!--typeAliases为某个Java类型起别名,别名不区分大小写
    type:指定起别名类的全类名,默认别名就是类名小写,user
    alias:起新的别名
-->
<typeAliases>
	<typeAlias type="com.queen.mybatis.bean.User"/>
</typeAliases>

修改UserMapper.xml映射文件

<!-- 将com.queen.mybatis.bean.User全类名用user替代 -->
<select id="findUserById" resultType="user">
	select id, loginId, userName, role, note from t_user where id = #{id}
</select>

上面的案例我们可以看到在typeAliases标签下面,可以为User类起一个别名,那么如果有很多的Java类呢,那不是下面有很多很多的<typeAlias></typeAlias>,我们是否能通过一种其他的配置实现为某一个包下面所有的类都起别名,而不用为单独的某一个类。答案是肯定的,MyBatis为我们提供了一个package标签,可以通过这个标签实现上面的功能配置。下面我们来看看如何使用package标签:

修改mybatis-config.xml文件

<typeAliases>
	<!-- <typeAlias type="com.queen.mybatis.bean.User"/> -->
	<!-- package:为某个包下所有类批量起别名
	     name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名,默认小写)
	 -->
	<package name="com.queen.mybatis.bean"/>
</typeAliases>

通过如上配置可以实现批量起别名

虽然我们可以使用package批量起别名,但是有一种情况会导致冲突,我们来模拟一下,新建一个User类,这个User类在com.queen.mybatis.bean.child目录下面,也就是bean的子包目录下面,如图:

老司机学习MyBatis之如何使用typeAliases别名和@Alias注解

启动测试类,控制台报错
老司机学习MyBatis之如何使用typeAliases别名和@Alias注解

这是别名冲突了。。。那我们现在又要如何解决这个问题呢?其实您能想到的,MyBatis都为我们想到了

A、使用@Alias注解为某个类型指定新的别名

B、修改User类文件

老司机学习MyBatis之如何使用typeAliases别名和@Alias注解

C、修改UserMapper.xml文件

老司机学习MyBatis之如何使用typeAliases别名和@Alias注解

D、启动测试类,看控制台是否报错

2017-07-30 09:36:51,569 [main] [com.queen.mybatis.mapper.UserMapper.findUserById]-[DEBUG] <==      Total: 1
User [id=1, loginId=Sabot, userName=萨博, role=革命军, note=革命军的二号人物,同艾斯一样,为蒙奇·D·路飞的哥哥(义兄)。]
2017-07-30 09:36:51,570 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Resetting autocommit to true on JDBC Connection [[email protected]]

通过上述测试我们可以得出结论:批量起别名的情况下,使用@Alias注解为某个类型指定新的别名,避免出现别名冲突报错


=======欢迎大家拍砖,小手一抖,多多点赞哟!=======

版权声明:本文为博主原创文章,允许转载,但转载必须标明出处。