浅谈Mybatis 中四个容易混淆的概念

1resultMapresultType
2parameterMap
(官方不推荐)
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 !&quot;&quot;.equals(command.trim())">
    and COMMAND=#{command}
  </if>
 <if test="description != null and !&quot;&quot;.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动态参数时需要住哟,使用$而不是#。

4、#{} 与 ONGL

转载于:https://my.oschina.net/360yg/blog/1612496

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值