参数命名

POJO

如果多个参数,正好是业务逻辑的数据模型,那么我们就可以直接传入POJO,这样#{}中就可以直接使用属性名

Map

如果多个参数不是业务逻辑的数据模型,没有对应的POJO,为了方便,我们可以传入一个map,此时#{key}就是取出map的值

在接口中创建一个新方法:

Employee getEmpByMap(Map<String,Object> map);

创建新的<select>标签

  1. <select id="getEmpByMap" resultType="com.figsprite.bean.Employee">  
  2.     select id,last_name lastName,gender,email from tb_employee where id = #{id} and last_name = #{lastName}  
  3. </select>  

然后我们再做测试

  1. @Test  
  2. public void test7() throws IOException {  
  3.     SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  
  4.     SqlSession openSession = sqlSessionFactory.openSession();  
  5.     try {  
  6.         EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);  
  7.         Map<String,Object> map = new HashMap<>();  
  8.         map.put("id",3);  
  9.         map.put("lastName","Hello");  
  10.         Employee e = mapper.getEmpByMap(map);  
  11.         System.out.println(e);  
  12.     }finally {  
  13.         openSession.close();  
  14.     }  
  15. }  

TO

如果getEmpByMap方法调用频率很高,每次调用都需要重新创建一个map,这样的话,还是一件麻烦事,如果是这种情况,建议编写一个TO(Transfer Object),比如我们在查找分页记录时,需要多项内容:

Page{
int index;
int size;
}

思考题:

public Employee getEmp(@Param("id") Integet id,String lastName)

取值:idè#{id/param1} lastNameè#{param2}

public Employee getEmp(Integer id,@Param("e") Employee emp)

取值:idè#{param1} lastNameè#{param2.lastName/e.lastName}

public Employee getEmpById(List<Integer> ids)

如果是Collection类型或者是数组,也会特殊处理,封装在map,如果是Collection,那么key是Collection[i],如果是List,那么我们还可以使用list[i],至于数组,array[i]

取值:取第一个id值 idè#{list[0]}

MyBatis映射文件3(参数处理Map)的更多相关文章

  1. Mybatis --- 映射文件、参数处理、参数值的获取、select元素

    映射文件:指导着MyBatis如何进行数据库增删改查, 有着非常重要的意义:   - cache   命名空间的二级缓存配置 - cache-ref   其他命名空间缓存配置的引用. - result ...

  2. MyBatis映射文件4(参数获取#{}和${}/select标签详解[返回类型为list])

    参数获取 之前我们都是采用#{}的方式进行参数传递,其实MyBatis还有另外的参数传递方式${} 使用方法相同,但是还是有很大区别的 这里做一个测试: <select id="get ...

  3. Mybatis映射文件中的参数传递

    一.接口中只有一个参数 1.参数是基本类型or基本类型的包装类or字符串类型 这种情况下映射文件中#{}里的内容可以是任意的,你可以使用#{xxx} 或 #{abc} .....因为此时#{}相当于一 ...

  4. mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例

    笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...

  5. Mybatis映射文件中#取值时指定参数相关规则

    Mybatis映射文件中#取值时指定参数相关规则 在#{}中,除了需要的数值外,还可以规定参数的一些其他规则. 例如:javaType,jdbcType,mode(存储过程),numericScale ...

  6. MyBatis映射文件中用#和$传递参数的特点

    在MyBatis映射文件中用#和$传递参数的特点, #是以占位符的形式来传递对应变量的参数值的,框架会对传入的参数做预编译的动作, 用$时会将传入的变量的参数值原样的传递过去,并且用$传递传递参数的时 ...

  7. Mybatis映射文件完整模板参照

    Mybatis映射文件完整模板参照 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE map ...

  8. MyBatis 映射文件详解

    1. MyBatis 映射文件之<select>标签 <select>用来定义查询操作; "id": 唯一标识符,需要和接口中的方法名一致; paramet ...

  9. MyBatis映射文件 相关操作

    一.MyBatis映射文件 1.简介 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行 ...

随机推荐

  1. 学习任务,阅读一下Redis分布式锁的官方文档

    地址: https://redis.io/topics/distlock 这是一篇质疑RedLock的论文:https://martin.kleppmann.com/2016/02/08/how-to ...

  2. Linux:Day8(上) 文件系统挂载和管理工具

    文件系统管理: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载: 解除此关联关系的过程称之为卸载: 把设备关联挂载点:Mount Point ...

  3. 【vue】钩子函数生命周期

    图1 图2: 图3 相关资料:http://www.zhimengzhe.com/Javascriptjiaocheng/236707.html    https://segmentfault.com ...

  4. 多个窗口开启后,切换到指定title的窗口

    1.在google中,可以开启多个窗口,这是需要切换到自己需要的窗口去定位元素.如下: #获取两个窗口的标题 ${titles} Selenium2Library.Get Window Titles ...

  5. 用return关键字实现求和操作

    package com.Summer_0419.cn; /** * @author Summer * 用return关键字的知识,实现求和操作 */ public class Test_Method0 ...

  6. 工具篇-Json处理

    1. @JsonProperty和@SerializedName注解 使用场景 将一个json格式的字符串转换成某个java对象,或者将一个java对象转换成json格式的字符串时,如果json字符串 ...

  7. Java入门篇(五)——字符串/String类

    前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...

  8. 蓝牙BLE设备主机重启回连流程分析

    如果一个BLE设备已经与蓝牙中心设备连接上,那么当中心设备的断电重启,其依然会和配对过的BLE设备连接上,而不需要重新走配对的流程,这个过程叫做回连. 这篇文章就分析一下当中心设备断电重启之后,其与B ...

  9. Java系统高并发之Redis后端缓存优化

    一:前端优化 暴露接口,按钮防重复(点击一次按钮后就变成禁用,禁止重复提交) 采用CDN存储静态化的页面和一些静态资源(css,js等) 二:Redis后端缓存优化 Redis 是完全开源免费的,遵守 ...

  10. el-date-picker 快捷日期简单计算

    const oneDaySeconds = 3600 * 1000 * 24 pickerOptions: { shortcuts: [ { text: '今天', onClick(picker) { ...