MyBatis中parameterType参数讲解

有时候在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部分别名
如果不想用全限定类型名称怎么办?
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为别名。

猜你喜欢

转载自blog.csdn.net/weixin_44116132/article/details/107585164