1.单个参数

  传入单个参数时,mapper文件中 #{}里可以写任意值

  1. /**
  2. * 传入单个参数
  3. */
  4. Employee getEmpById(Integer id);
  1. <!--单个参数 #{} 里可以写任意值-->
  2. <select id="getEmpById" resultType="org.maple.pojo.Employee">
  3. SELECT id,last_name name,email,gender
  4. FROM tbl_employee
  5. WHERE id = #{abc}
  6. </select>

2.多个参数

  1. /**
  2. * 传入多个参数
  3. */
  4. Employee getEmpByIdAndName(Integer id,String name);
  1. <select id="getEmpByIdAndName" resultType="org.maple.pojo.Employee">
  2. SELECT id,last_name name,email,gender
  3. FROM tbl_employee
  4. WHERE id = #{id}
  5. AND last_name = #{name}
  6. </select>

  此时会报错 Caused by: org.apache.ibatis.binding.BindingException:Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]

  传入多个参数时,mybatis会做特殊处理,

  将多个参数封装成一个map,key是param1...paramN#{},从map中获取指定的key值

解决办法

  1、使用param1..paramN,

  1. <select id="getEmpByIdAndName" resultType="org.maple.pojo.Employee">
  2. SELECT id,last_name name,email,gender
  3. FROM tbl_employee
  4. WHERE id = #{param1}
  5. AND last_name = #{param2}
  6. </select>

  2.使用方法1,并不能见名知意,所以推荐第二种方法

    命名参数,明确指定封装参数的map,

        key:使用@Param注解指定的值

        这样就可以通过#{}来取值

  1. /**
  2. * 传入多个参数
  3. */
  4. Employee getEmpByIdAndGender(@Param("id") Integer id, @Param("gender") Character gender);
  1. <select id="getEmpByIdAndGender" resultType="org.maple.pojo.Employee">
  2. SELECT id,last_name name,email,gender
  3. FROM tbl_employee
  4. WHERE id = #{id}
  5. AND gender = ${gender}
  6. </select>

3 .传入pojo

  如果多个参数正好是我们业务逻辑的数据模型,直接传入POJO,#{属性名}:取出POJO属性值

  1. /**
  2. * 传入pojo
  3. */
  4. Employee getEmpByIdAndNamePojo(Employee employee);
  1. <!--传入pojo对象-->
  2. <select id="getEmpByIdAndNamePojo" resultType="org.maple.pojo.Employee">
  3. SELECT id,last_name name,email,gender
  4. FROM tbl_employee
  5. WHERE id = #{id}
  6. AND last_name = #{name}
  7. </select>

4.传入Map

  如果多个参数不是业务模型中的数据,没有对应的POJO,不经常使用,为了方便,我们传入map

  1. /**
  2. * 传入map
  3. */
  4. Employee getEmpByMap(Map<String,Object> map);
  1. <!--传入map-->
  2. <select id="getEmpByMap" resultType="org.maple.pojo.Employee">
  3. SELECT id,last_name name,email,gender
  4. FROM tbl_employee
  5. WHERE id = #{id}
  6. AND last_name = #{name}
  7. </select>
  1. Map<String, Object> map = new HashMap<>();
  2. map.put("id",1);
  3. map.put("name","tom");
  4. Employee emp = mapper.getEmpByMap(map);

5.传入TO(transfer Object)

  多个参数不是业务中的模型,但是要经常使用,推荐写一个TO,数据传输对象。

6.思考

  

7.${},#{}区别

  #{}:是以预编译的形式,将参数设置到sql语句中,PreparedStatement;防止sql注入

  ${}:取出的值直接拼装在sql语句中;会有安全问题

  大多情况下,取参数使用#{}

  比如分表,select * from ${year}_salary where xxx;

  原生不支持占位符的:select * from tbl_employee order by ${name} ${order}

8.#{}的用法

  

<MyBatis>入门四 传入的参数处理的更多相关文章

  1. springMVC使用map接收入参 + mybatis使用map 传入查询参数

    测试例子: controllel层 ,使用map接收请求参数,通过Debug可以看到,请求中的参数的值都是字符串形式,如果将这个接收参数的map直接传入service,mybatis接收参数时会报错, ...

  2. Mybatis框架四:输入参数、输出参数

    输入参数可以有三种:简单类型,POJO,包装类 关于前两种: http://www.cnblogs.com/xuyiqing/p/8600888.html 这里写一下传递包装类参数: 一个POJO:U ...

  3. mybatis入门四 解决字段名与实体类属性名不相同的冲突

    一.创建测试需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), ...

  4. MyBatis(四)多参数处理问题

    这里总结了关于多参数传递时,MyBatis接收的三种方式. (1)接口中编写方法 public Emp getEmpByParams(Integer id,String lastNmae); publ ...

  5. Mybatis入门(四)配置别名(二)

    这一章我们练习一下Mybatis的别名,这大大的提高了我们的开发效率 类型别名(typeAliases) 类型别名是为 Java 类型设置一个短的名字. 它只和 XML 配置有关,作用在于用来减少类完 ...

  6. Mybatis入门(四)配置优化(一)

    这一章主要实验Mybatis的引入外部配置文件,属性(properties)这个属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素 ...

  7. 【转载】 mybatis入门系列四之动态SQL

    mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...

  8. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

  9. mybatis入门(四)

    mybatis入门 需求:根据id查询用户的信息 mysql数据库: CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `us ...

随机推荐

  1. 【Silverlight】Bing Maps学习系列(三):如何控制地图

    [Silverlight]Bing Maps学习系列(三):如何控制地图 本篇主要介绍如何对地图的一些常用控制操作,包括地图加载模式.根据精度和纬度定位.变焦程度等. 一.动态设置地图加载模式 在本系 ...

  2. 【POI】T1 特工 szp

    T1 特工szp [问题描述] Byteotian 中央情报局 (BIA) 雇佣了许多特工. 他们每个人的工作就是监视另一名特工.Byteasar 国王需要进行一次秘密行动,所以他要挑选尽量多的信得过 ...

  3. luogu 1121 环状最大两段子段和

    题目大意: 一个序列看做一个环 选两段数使它们和最大 思路: 定义一个dp数组i j 0/1 表示前i个取了连续的j段 0/1表示取不取第i个 但是因为看做一个环 首尾相接的情况可以看做是选三段,其中 ...

  4. ModuleNotFoundError: No module named 'cStringIO'

    这是2.x转3.x问题: 2.x写法: import cStringIO 3.x写法: from io import StringIO 问题解决.

  5. python3 批量管理Linux服务器 下发命令与传输文件

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- import paramiko import os, stat import sys import ope ...

  6. 服务器端解决ajax跨域问题

    这里描述以Tomcat为Web服务器情况下的解决办法,在Java Web程序的WEB-INF下的web.xml文件中加入如下配置即可. <!--cors filter--> <fil ...

  7. 在Linux环境下使用OpenSSL对消息和文件进行加密(转载)

    转自:http://netsecurity.51cto.com/art/201301/378513.htm 1.简介 OpenSSL是一款功能强大的加密工具包.我们当中许多人已经在使用OpenSSL, ...

  8. Rails5 layout 和 template

    layout是布局,比如页面的头(head), 脚(foot), 内容(body) template是布局的一部分的内容   这两货实在太像了,写了这些我也是一脸懵逼. 换个说法,layout和tem ...

  9. LaTex简历排版

    为了写好简历,倒腾了好几天的Latex,主要是因为中文支持问题还有morderncv的更新问题... 1.  http://www.ctex.org/CTeXDownload/ 建议下载v2.9.2. ...

  10. bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课【spfa】

    洛谷的数据毒啊 把(i,j,k)作为一个点spfa,表示点(i,j)朝向k方向,然后向四个方向转移即可 #include<iostream> #include<cstdio> ...