有时候在MyBatis的映射文件中,会发现这样一种情况:
parameterType的参数有时候直接写类型名称就可以了,比如:
<delete id="deleteUser" parameterType="Integer">
delete from user where uid = #{uid}
</delete>
但有时候,需要写全限定类名(需要把完整的包路径写上),比如:
<insert id="addUser" parameterType="com.po.MyUser">
insert into user (uname,usex) values(#{uname},#{usex})
</insert>
为什么实体类不能直接写类名(MyUser)呢?
为此,我查询了MyBatis的官方文档,mybatis已经把常用的数据类型注册了别名,因此当使用基本类型或者String类型时可以直接写类型名称,使用实体类型时必须使用全限定类名。
如果不想用全限定类型名称怎么办?
MyBatis提供了两种方法为你的实体类型注册别名:XML配置、注解方式。
XML配置:在mybatis的配置文件中,配置以下内容:
<typeAliases>
<typeAlias alias="MyUser" type="com.po.MyUser"/>
</typeAliases>
配置好后就可以直接在sql映射文件中使用别名,降低冗余的全限定类名书写。
<insert id="addUser" parameterType="MyUser">
insert into user (uname,usex) values(#{uname},#{usex})
</insert>
注解方式:
在mybatis的配置文件中,配置如下内容,name里为你的实体类型所在的包,即你想为实体类型注册别名所在类的包路径
<typeAliases>
<package name="com.po"/>
</typeAliases>
配置完成好后,在MyUser类中使用@Alias注解
@Alias("MyUser")
public class MyUser{
......
}
这样就可以直接在sql映射文件中使用别名.
<insert id="addUser" parameterType="MyUser">
insert into user (uname,usex) values(#{uname},#{usex})
</insert>
在每个com.po包中的JavaBean,如果没有使用注解的情况下,会使用Bean的首字母小写的非限定名来作为它的别名。比如上个例子中,没有使用@Alias(“MyUser”)情况下,自动注册以myUser为别名。