参数命名

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. 并发控制--Concurrency control--乐观、悲观及方法

    In information technology and computer science, especially in the fields of computer programming, op ...

  2. UVA208-Firetruck(并查集+dfs)

    Problem UVA208-Firetruck Accept:1733  Submit:14538 Time Limit: 3000 mSec  Problem Description The Ce ...

  3. 启动PHP study时提示80端口或者3306端口被占用的解决办法

    一.查看PID WIN+R打开命令行------>netstat -ano+回车,就会显示下面的信息: 二.打开任务管理器 Ctrl+Alt+Delete------>任务管理器,找到对应 ...

  4. [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划

    RRT是一种多维空间中有效率的规划方法.它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由从初始 ...

  5. 【移动端】icon中ng-cordova使用

    cordova介绍 Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等. Cordova支持如下7种移动操作系统:iOS ...

  6. TFT2.0液晶屏幕测试

    型号 尺寸:2.0寸 驱动芯片: ILI9225 分辨率:176*220 SPI 板载3.3v电平转换,直接插在arduino上可用. 安装这个库 这个库默认是 uno 板子的,如果换成mega256 ...

  7. mac python3 conda pytorch出错:libc++abi.dylib: terminating with uncaught exception of type NSException

    mac 10.14/ conda/python 3.7环境下运行神经网络例子出现错误: -- :::] -[NSApplication _setup:]: unrecognized selector ...

  8. mybatis之一对多

    今天主要话题围绕这么几个方面? mybatis一对多示例 sql优化策略 一.mybatis之一对多 在说一对多之前,顺便说一下一对一. 一对一,常见的例子,比如以常见的班级例子来说,一个班主任只属于 ...

  9. Redis 实现安全队列

    Redis的列表数据结构可以让我们方便的实现消息队列 例如用 LPUSH(BLPUSH)把消息入队,用 RPOP(BRPOP)获取消息 绝大部分的情况下,这些操作都是没问题的,但并不能保证绝对安全 当 ...

  10. buildroot使用介绍

    buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Linux内核一样,通过buildro ...