使用MyBatis3时 selectOne 方法返回null的问题记录
不多废话,直接上干货。
mapper配置:
1 <resultMap type="User" id="usermap"> 2 <result column="uId" property="uId"/> 3 <result column="uName" property="uName"/> 4 <result column="uNickName" property="uNickName"/> 5 <result column="uPhone" property="uPhone"/> 6 <result column="uEmail" property="uEmail"/> 7 <result column="uPassword" property="uPassword"/> 8 <result column="uTrueName" property="uTrueName"/> 9 <result column="uCreateTime" property="uCreateTime"/> 10 </resultMap> 11 <resultMap type="User" id="mp"> 12 <result column="uId" property="userId"/> 13 <result column="uName" property="userName"/> 14 <result column="uNickName" property="userNickName"/> 15 <result column="uPhone" property="userPhone"/> 16 <result column="uEmail" property="userEmail"/> 17 <result column="uPassword" property="userPassword"/> 18 <result column="uTrueName" property="userTrueName"/> 19 <result column="uCreateTime" property="userCreateTime"/> 20 </resultMap> 21 <select id="selectBlog" resultMap="mp"> 22 select * from tb_user where uId = #{userId} 23 </select>
Java代码:
1 SqlSession session = sqlSessionFactory.openSession(); 2 User u = new User(); 3 u.setUserId(2); 4 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的对应书写错误。