<MyBatis>入门四 传入的参数处理
1.单个参数
传入单个参数时,mapper文件中 #{}里可以写任意值
/**
* 传入单个参数
*/
Employee getEmpById(Integer id);
<!--单个参数 #{} 里可以写任意值-->
<select id="getEmpById" resultType="org.maple.pojo.Employee">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE id = #{abc}
</select>
2.多个参数
/**
* 传入多个参数
*/
Employee getEmpByIdAndName(Integer id,String name);
<select id="getEmpByIdAndName" resultType="org.maple.pojo.Employee">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE id = #{id}
AND last_name = #{name}
</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,
<select id="getEmpByIdAndName" resultType="org.maple.pojo.Employee">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE id = #{param1}
AND last_name = #{param2}
</select>
2.使用方法1,并不能见名知意,所以推荐第二种方法
命名参数,明确指定封装参数的map,
key:使用@Param注解指定的值
这样就可以通过#{}来取值
/**
* 传入多个参数
*/
Employee getEmpByIdAndGender(@Param("id") Integer id, @Param("gender") Character gender);
<select id="getEmpByIdAndGender" resultType="org.maple.pojo.Employee">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE id = #{id}
AND gender = ${gender}
</select>
3 .传入pojo
如果多个参数正好是我们业务逻辑的数据模型,直接传入POJO,#{属性名}:取出POJO属性值
/**
* 传入pojo
*/
Employee getEmpByIdAndNamePojo(Employee employee);
<!--传入pojo对象-->
<select id="getEmpByIdAndNamePojo" resultType="org.maple.pojo.Employee">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE id = #{id}
AND last_name = #{name}
</select>
4.传入Map
如果多个参数不是业务模型中的数据,没有对应的POJO,不经常使用,为了方便,我们传入map
/**
* 传入map
*/
Employee getEmpByMap(Map<String,Object> map);
<!--传入map-->
<select id="getEmpByMap" resultType="org.maple.pojo.Employee">
SELECT id,last_name name,email,gender
FROM tbl_employee
WHERE id = #{id}
AND last_name = #{name}
</select>
Map<String, Object> map = new HashMap<>();
map.put("id",1);
map.put("name","tom");
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>入门四 传入的参数处理的更多相关文章
- springMVC使用map接收入参 + mybatis使用map 传入查询参数
测试例子: controllel层 ,使用map接收请求参数,通过Debug可以看到,请求中的参数的值都是字符串形式,如果将这个接收参数的map直接传入service,mybatis接收参数时会报错, ...
- Mybatis框架四:输入参数、输出参数
输入参数可以有三种:简单类型,POJO,包装类 关于前两种: http://www.cnblogs.com/xuyiqing/p/8600888.html 这里写一下传递包装类参数: 一个POJO:U ...
- mybatis入门四 解决字段名与实体类属性名不相同的冲突
一.创建测试需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), ...
- MyBatis(四)多参数处理问题
这里总结了关于多参数传递时,MyBatis接收的三种方式. (1)接口中编写方法 public Emp getEmpByParams(Integer id,String lastNmae); publ ...
- Mybatis入门(四)配置别名(二)
这一章我们练习一下Mybatis的别名,这大大的提高了我们的开发效率 类型别名(typeAliases) 类型别名是为 Java 类型设置一个短的名字. 它只和 XML 配置有关,作用在于用来减少类完 ...
- Mybatis入门(四)配置优化(一)
这一章主要实验Mybatis的引入外部配置文件,属性(properties)这个属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素 ...
- 【转载】 mybatis入门系列四之动态SQL
mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...
- mybatis入门系列二之输入与输出参数
mybatis入门系列二之详解输入与输出参数 基础知识 mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...
- mybatis入门(四)
mybatis入门 需求:根据id查询用户的信息 mysql数据库: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `us ...
随机推荐
- ios26--kvc
// // main.m // 13-KVC的使用 // /** KVC: Key Value Coding(键值编码):1.取值赋值.2.字典转模型. */ #import <Foundati ...
- hdoj--5526--欧拉回路(欧拉回路)
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 【USACO 2010FEB】 slowdown
[题目链接] 点击打开链接 [算法] dfs序 + 线段树 树链剖分同样可以解决这个问题 [代码] #include<bits/stdc++.h> using namespace std; ...
- Python中关键字global与nonlocal的区别
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xCyansun/article/details/79672634终于下定决心学习Python了.既然 ...
- POJ2653 Pick-up sticks 判断线段相交
POJ2653 判断线段相交的方法 先判断直线是否相交 再判断点是否在线段上 复杂度是常数的 题目保证最后答案小于1000 故从后往前尝试用后面的线段 "压"前面的线段 排除不可能 ...
- apache相关补充
apache相关补充 sendfile机制 1)不用sendfile的传统网络传输过程: read(file, tmp_buf, len) write(socket, tmp_buf, len) 2) ...
- Photoshop CC2019破解版
Photoshop CC2019 精简版: 链接:https://pan.baidu.com/s/1PeFrhtLHxLRXCW_vMkAZDg 提取码:q6nl Photoshop CC2019: ...
- 二分图最大匹配(匈牙利算法) UVA 670 The dog task
题目传送门 /* 题意:bob按照指定顺序行走,他的狗可以在他到达下一个点之前到一个景点并及时返回,问狗最多能走多少个景点 匈牙利算法:按照狗能否顺利到一个景点分为两个集合,套个模板 */ #incl ...
- 01—Spring基础配置IOC
- IDEA破解方法以及快捷键大全
IntelliJ IDEA2017.3 激活 - CSDN博客:https://blog.csdn.net/dc2222333/article/details/78582131 Eclipse和Int ...