有人可以帮助澄清MyBatis文档定义的重命名属性/列吗?
MyBatis文档
文档定义了一个简单的Java类:
public class User {
private int id;
private String username;
private String password;
...
}
以及以下内容:
关于ResultMaps的好处是你已经学到了很多东西 关于他们,但你还没有看到一个!这些简单的案例 不要求你在这里看到任何东西。只是为了清酒, 让我们看看这最后一个例子看起来像是一个外部的 resultMap,因为这是解决列名不匹配的另一种方法。
<resultMap id="userResultMap" type="User"> <id property="id" column="user_id" /> <result property="username" column="user_name"/> <result property="password" column="password"/> </resultMap>
引用它的语句使用resultMap属性 这样做(注意我们删除了resultType属性)。例如:
<select id="selectUsers" resultMap="userResultMap"> select user_id, user_name, password from some_table where id = #{id} </select>
我的问题 以上是否意味着POJO / Bean变量&#34;用户名&#34;和#34;密码&#34;被分配给名为user_name和hashed_password的数据库列,这是否与他们也编写以下内容相同?
<select id="selectUsers" resultType="User"> select user_id as "id", user_name as "userName", hashed_password as "password" from some_table where id = #{id} </select>
答案 0 :(得分:0)
@physicsboy你在最后的评论中是对的。基本上,resultmap将列映射到属性。结果图'看到'您设置列的姓氏,例如,如果您进行以下查询:
select id, column_A from table
您的结果图将是
<resultMap id="ResultMapName" type="WhateverType">
<id property="id" column="id" />
<result property="columnA" column="column_A"/>
</resultMap>
但是如果你为其中一个列设置别名:
select id, column_A as column_A_with_alias from table
您的resultMap将是
<resultMap id="ResultMapName" type="WhateverType">
<id property="id" column="id" />
<result property="columnA" column="column_A_with_alias"/>
</resultMap>
无需说您的POJO应该包含所有属性的getter和setter。
答案 1 :(得分:0)
是。 结果映射告诉MyBatis“从查询中的第x列获取值,并将其存储在POJO中的字段y中。
更多信息: 当POJO中的字段与查询中的列名匹配时,MyBatis喜欢它。 在这种情况下, 你不需要resultMap条目。
当POJO中的字段与查询中的列名不完全匹配时,您只需要resultMap(在帖子中“我的问题”上面的示例中就是这种情况)。
由于User
POJO中的字段与第二个示例中的列名称不完全匹配(“hashedPassword”!=“password”),您仍然需要使用resultMap条目在查询和您的查询之间进行映射POJO。
如果您按如下方式更改查询:
<select id="selectUsers" resultType="User">
select
user_id as "id",
user_name as "username",
hashed_password as "hashedPassword"
from some_table
where id = #{id}
</select>
然后你不需要resultMap, 因为“用户名”是POJO中的实际字段名称。