typeAliases 标签和 package 标签
# 130.typeAliases 标签和 package 标签
如题,讲解下这两个标签的作用
# typeAliases
之前我们写 delete 标签的时候,说过 parameterType
可以写 int,INT,Integer,INTEGER(不区分大小写),java.lang.Integer 等,而 resultType 不行,必须得严格按照要求来:
<select id="findById" parameterType="INT" resultType="com.peterjxl.domain.User">
select * from user where id = #{uid}
</select>
1
2
3
2
3
为什么 parameterType
可以这么随意呢?这是因为 Mybatis 起了别名,所以就不区分大小写,例如当解析到 int,INT 时,都知道是 int 类型。而我们也可以在 SqlMapConfig.xml 里配置别名:
<properties resource="jdbcConfig.properties"/>
<typeAliases>
<typeAlias type="com.peterjxl.domain.User" alias="user"/>
</typeAliases>
1
2
3
4
2
3
4
type 属性指定的是实体类全限定类名。alias 属性指定别名。注意 typeAliases 标签得在 properties 标签后面定义。
当指定了别名,就不再区分大小写了。我们可以在 select 标签里直接用:
<!-- 根据QueryVo的条件查询用户-->
<select id="findUserByVo" parameterType="com.peterjxl.domain.QueryVo" resultType="USER">
select * from user where username like #{user.userName}
</select>
1
2
3
4
2
3
4
# package 标签
实际项目中,一个包下面有很多很多的类,如果每个都是用 alias 配置,就很麻烦;此时我们可以用 package 标签简化。
<typeAliases>
<!-- <typeAlias type="com.peterjxl.domain.User" alias="user"/>-->
<package name="com.peterjxl.domain"/>
</typeAliases>
1
2
3
4
2
3
4
当指定包的名称后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写,
在 mappers 标签里,也可以定义 package,指定 dao 接口所在的包,这样就不用逐个指定配置文件了:
<mappers>
<!--<mapper resource="com/peterjxl/dao/IUserDao.xml"/>-->
<!--<mapper class="com.peterjxl.dao.IUserDao"/>-->
<package name="com.peterjxl.dao"/>
</mappers>
1
2
3
4
5
2
3
4
5
当指定了之后就不需要在写 mapper 以及 resource 或者 class 了
注意,在 typeAliases 标签里写的是实体类的包名,在 mappers 标签里写的是 dao 接口所在的包名
# 源码
本文所有代码已上传到了 GitHub (opens new window) 和 Gitee (opens new window) 上,并且创建了分支 demo12,读者可以通过切换分支来查看本文的示例代码。
上次更新: 2024/10/1 21:14:36