mybatis中resultType、resultMap、parameterType和parameterMap详解

后端 潘老师 2周前 (11-15) 16 ℃ (0) 扫码查看

本文主要讲解关于mybatis框架中resultType、resultMap、parameterType和parameterMap这四个属性相关内容,让我们来一起学习下吧!

MyBatis的动态查询中,resultTyperesultMapparameterTypeparameterMap这四个属性用于定义SQL语句中的结果类型和参数类型。它们的区别和使用方法如下:

1. resultType

resultType:用于指定SQL语句的结果类型。它可以是一个Java基本类型(如intString等),也可以是一个自定义的Java对象。当使用resultType时,MyBatis会自动将查询结果映射到指定类型的对象中。例如:

<select id="getUserById" resultType="com.example.User">
  SELECT id, name, age FROM users WHERE id = #{id}
</select>

在上述示例中,resultType指定了查询结果映射到com.example.User对象。

2. resultMap

resultMap:用于定义复杂的结果映射关系。通过resultMap,你可以将查询结果的列与Java对象的属性进行映射。使用resultMap可以更灵活地处理复杂的结果集,支持关联查询、嵌套查询等。例如:

<resultMap id="userMap" type="com.example.User">
  <id property="id" column="user_id"/>
  <result property="name" column="user_name"/>
  <result property="age" column="user_age"/>
  
  <if test="includeAddress">
    <association property="address" javaType="com.example.Address">
      <id property="id" column="address_id"/>
      <result property="city" column="address_city"/>
      <result property="street" column="address_street"/>
    </association>
  </if>
</resultMap>

在上述示例中,resultMap定义了com.example.User对象与查询结果的映射关系。

3. parameterType

parameterType:用于指定SQL语句的参数类型。它指定了传入SQL语句的参数的Java类型。例如:

<select id="getUserById" parameterType="int" resultType="com.example.User"> 
  SELECT id, name, age FROM users WHERE id = #{id} 
</select>

4.parameterMap

parameterMap:用于定义复杂的参数映射关系。通过parameterMap,你可以将方法的参数与SQL语句中的参数进行映射。使用parameterMap可以更灵活地处理复杂的参数传递。然而,由于它较为繁琐且不易维护,通常推荐使用parameterType来指定简单的参数类型。例如:

<parameterMap id="userParam" type="com.example.User">
  <parameter property="id" jdbcType="INTEGER" mode="IN"/>
</parameterMap>

<select id="getUserById" parameterMap="userParam" resultType="com.example.User">
  SELECT id, name, age FROM users WHERE id = #{id}
</select>

在上述示例中,parameterType指定了getUserById方法的参数类型为int

综上所述,resultTypeparameterType适用于简单的结果和参数类型,而resultMapparameterMap适用于处理复杂的结果和参数映射关系。

5.优势

关于resultTyperesultMapparameterTypeparameterMap这四个属性有以下几个优势:

  1. 类型安全: 通过指定resultTypeparameterType属性,可以确保查询结果和参数的类型与指定的Java类型一致。这样可以避免类型转换错误和数据损失,并提供编译时的类型检查。
  2. 灵活性和可读性: 使用resultMapparameterMap属性,可以定义复杂的结果映射和参数映射规则,将查询结果的列与Java对象的属性进行灵活的映射。这样可以提高代码的可读性和可维护性,并支持更复杂的映射需求。
  3. 命名灵活性: 通过使用resultMapparameterMap属性,可以将查询结果的列名和SQL语句中的参数名与Java对象的属性名解耦。这样可以在数据库模式变化或者重构时更加灵活地调整映射关系,而无需修改Java对象的属性名。
  4. 代码复用: 使用resultMapparameterMap属性,可以定义映射规则,并在多个查询语句中重复使用。这样可以减少代码的重复编写,提高代码的复用性和可维护性。
  5. 可扩展性: 使用resultMapparameterMap属性,可以定义自定义的映射规则,支持更复杂的对象关系映射。这样可以满足特定的业务需求,并支持扩展和定制化的映射逻辑。

如何区分resultTypeparameterType这两个属性:

  • resultType用于指定查询结果的类型。它告诉MyBatis要将查询结果映射成哪种Java对象。例如,如果查询结果是一个整数,你可以将resultType设置为int;如果查询结果是一个用户对象,你可以将resultType设置为用户对象的类名。这样,MyBatis会自动将查询结果转换成指定的Java对象。
  • parameterType用于指定查询或更新操作的参数类型。它告诉MyBatis要接收哪种类型的参数来执行数据库操作。例如,如果你想执行一个查询操作,并且需要传入一个整数作为参数,你可以将parameterType设置为int。这样,你就可以在SQL语句中使用该参数进行查询。

resultMapparameterMap如何区分:

resultMapparameterMap是用于定义结果映射和参数映射规则的两个不同的映射对象。

  • resultMap用于定义查询结果的映射规则。它指定了如何将数据库查询结果的列映射到Java对象的属性上。通过resultMap,你可以指定每个列与Java对象属性之间的映射关系,包括列名、属性名、数据类型等。这样,当查询结果返回时,MyBatis会根据resultMap中定义的规则将查询结果映射到相应的Java对象中。
  • parameterMap用于定义执行数据库操作时的参数映射规则。它指定了如何将传入的参数映射到SQL语句中的占位符或命名参数上。通过parameterMap,你可以指定每个参数的名称、类型、以及在SQL语句中的位置或名称。这样,当执行数据库操作时,MyBatis会根据parameterMap中定义的规则将传入的参数映射到SQL语句中相应的位置或名称上。

resultMap用于定义查询结果的映射规则,而parameterMap用于定义参数的映射规则。它们分别描述了如何将查询结果映射到Java对象和如何将参数映射到SQL语句中。通过使用不同的映射对象,可以灵活地定义和控制查询结果和参数的映射关系,以满足不同的业务需求。

以上就是关于mybatis中resultType、resultMap、parameterType和parameterMap这四个属性相关的全部内容,希望对你有帮助,学习愉快哦!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/11240.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】