使用MyBatis3时 selectOne 方法返回null的问题记录

时间:2022-01-09 15:01:33

不多废话,直接上干货。

mapper配置:

     <resultMap type="User" id="usermap">
<result column="uId" property="uId"/>
<result column="uName" property="uName"/>
<result column="uNickName" property="uNickName"/>
<result column="uPhone" property="uPhone"/>
<result column="uEmail" property="uEmail"/>
<result column="uPassword" property="uPassword"/>
<result column="uTrueName" property="uTrueName"/>
<result column="uCreateTime" property="uCreateTime"/>
</resultMap>
<resultMap type="User" id="mp">
<result column="uId" property="userId"/>
<result column="uName" property="userName"/>
<result column="uNickName" property="userNickName"/>
<result column="uPhone" property="userPhone"/>
<result column="uEmail" property="userEmail"/>
<result column="uPassword" property="userPassword"/>
<result column="uTrueName" property="userTrueName"/>
<result column="uCreateTime" property="userCreateTime"/>
</resultMap>
<select id="selectBlog" resultMap="mp">
select * from tb_user where uId = #{userId}
</select>

Java代码:

         SqlSession session = sqlSessionFactory.openSession();
User u = new User();
u.setUserId(2);
User s1 = session.selectOne("selectBlog", u);

以上是MyBatis配置的两种两种 resultMap(usermap,mp),以及Java调用代码。

结果:

  usermap:可以查到结果,但是当用对象接收时会显示NULL。

  mp:可以使用。

原因:

  resultMap > result:property:映射到列结果的字段或属性。如果匹配的是存在的,和给定名称相同 的 JavaBeans 的属性,那么就会使用。否则 MyBatis 将会寻找给定名称 property的字段。这两种情形你可以使用通常点式的复杂属性导航。比如,你 可以这样映射一些东西: “username” ,或者映射到一些复杂的东西: “address.street.number” 。

resultMap > result:column:从数据库中得到的列名,或者是列名的重命名标签。这也是通常和会 传递给 resultSet.getString(columnName)方法参数中相同的字符串。

结论:

  column、property的对应书写错误。