需要别名配置的情况有两种(我才疏学浅暂时只知道两种)
1、为属性字段配置别名resultMap
在进行数据操作时,有时数据库的属性字段与我们建立的实体类的属性字段不对应,或者在进行sql语句选择的时候为选择结果取了别名导致与实体类属性名称不对应,这时候我们就需要为属性进行别名配置。
这种情况下配置别名主要用到的标签就是resultMap。在映射文件中配置。
数据库如下:
建立的实体类如下图(只截取了该实体类的全部属性):
在Mapper接口中添加如下方法:
通过用户id查询用户信息
public User findeByidBymap(int id);
在映射文件中,添加如下代码段。
在select标签中,最后一个参数有resultType和resultMap。当sql语句属性字段与实体类属性字段一致时,选用resultType。
通过观察,我的数据库属性字段和实体类属性字段其实是一样的。但是在进行sql语句选择时,我为他们起了别名(SELECT id id_,username username_,sex sex_,address address_ FROM user
WHERE id=#{id}),注意:一定是sql语句选出来之后的属性字段(如果没有取别名,那就是数据库的属性字段。取了别名就是你取的别名字段)与实体类进行别名的映射匹配。我的例子中,因为取了别名,所以他们是不匹配的,所以此处在select标签中的最后一个参数选用resultMap。在select标签上面添加一个resultMap标签,标签的第一个参数 id="findeByidBymapcheck"中,这个id是自己取的,这个id与select标签中的resultMap="findeByidBymapcheck"必须一致。resultMap标签中type就写接口方法中的返回类型。在标签内部一一对应。
<resultMap id="findeByidBymapcheck" type="com.zwj.model.User"><!-- type就写返回的模型的名称-->
<!--下面第一行是主键-->
<id column="id_" property="id"></id>
<result column="username_" property="username"></result>
<!--properties是实体类中真实的属性,column是别名-->
<result column="sex_" property="sex"></result>
<result column="address_" property="address"></result>
</resultMap>
<select id="findeByidBymap" parameterType="int" resultMap="findeByidBymapcheck">
SELECT id id_,username username_,sex sex_,address address_ FROM `user` WHERE id=#{id}
</select>
测试:
2、为实体类配置别名typeAlias
我们在写映射文件的时候,需要写返回类型。比如在上面代码段中通过写模型的全限定名称来指明返回类型。有些很长,或者在进行大量的映射编写时候,就很繁杂。下面是两种为实体类写别名的办法。
(1)为单个实体类配置别名:在全局配置文件中,注意是全局配置文件!在全局配置文件中添加typeAliases标签
<typeAliases>
<!--为单个实体类配置别名,前面是实体类的全限定名称,alias是别名-->
<typeAlias type="com.zwj.model.User" alias="user"></typeAlias>
</typeAliases>
(2)批量配置别名:
<typeAliases>
<!--为整个包下的所有实体类配置别名,其别名为类名(首字母大小写都可以)-->
<package name="com.zwj.model"></package>
</typeAliases>
自己的笔记,欢迎指正哈!