Version: Next

ResultMap

新建一个项目,拷贝之前的,测试实体类字段不一致的情况

新建模块mybatis03,重新导入父工程pom.xml文件

  • 将mybatis02的配置文件复制粘贴

  • 复制src下的文件

  • 复制test下的文件

  • 修改Pojo属性名

    public class User implements Serializable {
    private int id;
    private String name;
    // private String password;
    private String pwd;
    }

    还能查出数据,但是password字段的值全变成了null

    #返回结果
    User(id=1, name=改名的, pwd=null)
    User(id=2, name=狂神2, pwd=null)
    User(id=3, name=map来的, pwd=null)
    User(id=4, name=狂神1, pwd=null)

    解决方法:

    • 起别名

      <select id="getUserById" resultType="com.bsx.pojo.User" parameterType="int">
      SELECT id, name, password as pwd FROM USER WHERE id = #{id}
      </select>
    • ResultMap

ResultMap——结果集映射

结果集映射

数据库: id name password

实体类: id name pwd

将数据库的表示形式变为实体类的表示形式

配置mapper.xml,将数据库字段映射为实体类属性

<mapper namespace="com.bsx.dao.UserMapper">
<!-- 结果集映射-->
<resultMap id="UserMap" type="com.bsx.pojo.User">
<!-- colum数据库种的字段, property实体类种的属性-->
<!-- <result column="id" property="id"/>-->
<!-- <result column="name" property="name"/>-->
<result column="password" property="pwd"/>
</resultMap>
<select id="getUserById" resultMap="UserMap">
<!-- SELECT * FROM USER WHERE id = #{id} -->
SELECT * FROM USER WHERE id = #{id}
</select>
</mapper>

结果映射

  • resultMap元素是Mybatis中最重要最强大的元素。它可以让你从90%的JDBC ResultSets数据提取代码中解放出来,并在一些情况下允许你进行一些JDBC不支持的操作。

  • ResultMap的设计思想是,对于简单的语句根部不需要配置显示的结果映射,而对于复杂一点的语句只需要描述他们的关系就行了

  • ResultMap最优秀的地方在于,虽然你已经对他相当了解了,但是根本就不需要显式的用到他们

使用流程:

  1. mapper.xml里新建resultmap标签,设定从数据库字段到实体类属性的映射
  2. mapper.xml中引用resultMap标签的语句中使用resultMap属性,不再使用resultType

但更复杂的地方在后面多对一,一对多,多对多