<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 ...
随机推荐
- 在java中除去字符串(String)中的换行字符(\r \n \t)
我们先来看几个例子: 例1: public class Test { public static void main(String[] args) { String s = "'sds gd ...
- Bing必应地图中国API-画线与添加多边形
Bing必应地图中国API-画线与添加多边形 2011-05-24 14:31:20| 分类: Bing&Google|字号 订阅 在必应地图上画线的功能应用也很广泛:显示从出发地到 ...
- 【BZOJ 3732】 Network
[题目链接] 点击打开链接 [算法] 求出这个图的最小生成树,对于每次询问,用倍增法求出最近公共祖先,查询最小生成树上两点路径上的最大值 算法的正确性? 假设x和y在最小生成树中 ...
- POJ1912 A highway and the seven dwarfs (判断凸包与直线相交 logn)
POJ1912 给定n个点 和若干条直线,判断对于一条直线,是否存在两个点在直线的两侧. 显然原命题等价于 凸包与直线是否相交. O(n)的算法是显而易见的 但是直线数量太多 就会复杂到O(n^2)由 ...
- 使用Google Closure Compiler全力压缩代码(转)
JavaScript压缩代码的重要性不言而喻,如今的压缩工具也有不少,例如YUI Compressor,Google Closure Compiler,以及现在比较红火的UglifyJS.Uglify ...
- curl 做爬虫 用服务器代理ip
有时候会ip会封锁,所以会用一些模拟代理ip进行抓取测试 从网上找了一下代码 function curl_string ($url,$user_agent,$proxy){ $ch = ...
- NLog简单配置与使用
对项目添加NLog 安装完成后,在项目里面会自动引入该引入的dll,并且会添加如下两个文件 NLog的配置主要是在这个config文件里.当然也可以将这个文件里面的nlog节点复制到项目配置文件App ...
- DHTML_____window对象的事件
<html> <head> <meta charset="utf-8"> <title>window对象事件</title&g ...
- Python之数据聚合与分组运算
Python之数据聚合与分组运算 1. 关系型数据库方便对数据进行连接.过滤.转换和聚合. 2. Hadley Wickham创建了用于表示分组运算术语"split-apply-combin ...
- [算法天天练] - C语言实现约瑟夫环(2)
Linux下 #include <stdlib.h>#include <stdio.h> int main(){ int n,m,i,s = 0; printf("E ...