1 | resultMap | resultType |
2 | parameterMap (官方不推荐) | parameterType |
3 | #{} | ${} |
4 | #{} | ONGL |
1、resultMap 与 resultType
结果集和 java 对象的映射关系如下图1。
<resultMap type="com.imooc.bean.Message" id="MessageResult">
<id column="ID" jdbcType="INTEGER" property="id"/>
<result column="COMMAND" jdbcType="VARCHAR" property="command"/>
<result column="DESCRIPTION" jdbcType="VARCHAR" property="description"/>
<result column="CONTENT" jdbcType="VARCHAR" property="content"/>
</resultMap>
示例 图1
package com.imooc.bean; import org.apache.ibatis.type.Alias; /*与消息表对应的实体类 */ @Alias(value = "message") public class Message { private String id; // 主键 private String command; // 指令名称 private String description; // 描述 private String content; // 内容 // ... get/set 我就不贴出来了~ } 示例 图2
主要有以下三种写法。
<select id="queryMessageList" resultMap="MessageResult"> ==》写法1
<select id="queryMessageList" resultType="com.imooc.bean.Message"> ==》写法2
<select id="queryMessageList" resultType="java.util.Map"> ==》写法3
<select id="queryMessageList" resultType="MessageResult"> ===》错误写法4
相同点:首先,二者都是表示结果集 与 java 对象的一种对应关系。
不同点:当用 resultType的时候,就不能写成 resultMap 的 id,如上面的错误写法4,而必须是java 类型。这里又分两种写法(分别对应上面的写法2、写法3)
1:resultType="com.imooc.bean.Message ===》大小写不敏感的。
2:resultType="java.util.Map" ===》Map本身就大小写敏感。
特别说明:1、当用resultType,可以不写映射,即图1的内容。
2、当用第四种写法Map时,结果集字段必须和java 对象一致(大小写敏感),所以字段要取别名。
---list[{DESCRIPTION=asdasdasd, ID=7, CONTENT=asdasdasd, command=123}]
<select id="queryMessageList" resultType="java.util.Map">
select ID,COMMAND command,DESCRIPTION description,CONTENT content from MESSAGE
<where>
<if test="command != null and !"".equals(command.trim())">
and COMMAND=#{command}
</if>
<if test="description != null and !"".equals(description.trim())">
and DESCRIPTION like '%' #{description} '%'
</if>
</where>
</select>
示例 图3
3、#{} 与 ${}
当你使用了@Param注解来声明参数时,如果使用 #{} 或 ${} 的方式都可以。
当你不使用@Param注解来声明参数时,必须使用 #{}方式。如果使用 ${} 的方式,会报错。
select ID,COMMAND command,DESCRIPTION,CONTENT from MESSAGE WHERE COMMAND=#{command} 正确1
select ID,COMMAND command,DESCRIPTION,CONTENT from MESSAGE WHERE COMMAND=${command} 错误2
select ID,COMMAND command,DESCRIPTION,CONTENT from MESSAGE WHERE COMMAND='${command}'正确3
用法2:order by 字段
mybatis排序时使用order by动态参数时需要住哟,使用$而不是#。