mybatis的resultMap和resultType分析

版权声明:转载请标明原作者及地址 https://blog.csdn.net/cauchy6317/article/details/81904619

“myabtis的.xml文件中有些字段(变量)的数据可以查出来,有些字段(变量)的数据查询不出来。”刚学springboot+myabtis的同学经常有这样的疑问。

看完此篇,你就可以完全掌握解决办法了。记得点赞哦!鼓励一下博主。

现在的.xml文件几乎都使用mybatis-gennerator插件自动生成所需要的dao、bean、mapper xml文件。那么自动生成后的bean中的变量名和数据库的表中的字段名是完全对应的。

private int id;
private String userName;
private String hashedPassword;

生成的实体类是这样的。不过表中带有下划线的字段 自动生成的实体类变量 不会带有下划线。这时候在.xml文件中select语句加上resultType=“com.***.***.Student”是获取不到userName和hashedPassword的值(可以获取id的值)。因为加上resultType查询的结果中USER_NAME对应不上实体类中userName(hashedPassword也是一样)。如果列名和属性名没有精确匹配,可以在 SELECT 语句中对列使用别名(这是一个 基本的 SQL 特性)来匹配标签。

<select id="selectStudents" resultType="com.***.***.Student">
  select *
  from STUDENT
</select>

<!--使用别名解决字段和变量的对应问题-->
<select id="selectStudents" resultType="com.***.***.Student">
  select ID, USER_NAME AS userName, HASHED_PASSWORD AS hashedPassword
  from STUDENT
</select>

但是取别名指标不治本,每次select时都要写别名就很麻烦了。不过麻烦的事情,大神们早就想好了解决办法,不然mybatis怎么能越来越流行。

在自动生成.xml时文件中会生成resultMap代码。

 <resultMap id="BaseResultMap" type="com.ax.ams.entity.DcBaseInfoCompanyGis" >
    <id column="ID" property="id" jdbcType="INT" />
    <result column="USER_NAME" property="userName" jdbcType="VARCHAR" />
    <result column=HASHEDPASSWORD" property="hashedPassword" jdbcType="VARCHAR" />
  </resultMap>

<!--resultMap可以轻松解决字段对应的问题-->
<select id="selectStudents" resultMap="BaseResultMap">
  select *
  from STUDENT
</select>

resultMap中的column一定跟数据库的表中字段完全一致,property一定要和实体类的变量完全一致。

mybatis官网

推荐阅读:https://blog.csdn.net/leo3070/article/details/77899574

猜你喜欢

转载自blog.csdn.net/cauchy6317/article/details/81904619