从别人说的方案中看出,传递参数方案还挺多,不如自己整理下,以便以后使用过程中有个笔记回忆录。

  • 1、传递一个参数的用法:

配置文件

<select id="getById" resultType="TaskAutoExecutePlan" resultMap="TaskAutoExecutePlanResult" parameterType="java.lang.String">
select * from TaskAutoExecutePlan where id=#{id}
</select>

注意:这里边需要在dao层传递定义的接口类对应getById函数的参数名最好也是id,类型为String,否则也不会出现异常(我测试的结果是通过了,比如:函数写成这样getById(String name))。

Mapper.java

public TaskAutoExecutePlan getById(String id);

Server.java

    @Override
public TaskAutoExecutePlan getById(String id) {
SqlSession sqlSession = this.factory.openSession();
TaskAutoExecutePlan result = sqlSession.selectOne("com.xxx.mapper.TaskAutoExecutePlanMapper.getById",id);
sqlSession.commit();
sqlSession.close(); return result;
}
  • 2、传递多个参数的用法,使用Index来替换参数名称:

配置文件

 <select id="getByTaskStatusAndAutoExecutePlanType" resultType="TaskAutoExecutePlan" resultMap="TaskAutoExecutePlanResult">
select * from TaskAutoExecutePlan where taskStatus=#{0} and autoExecutePlanType=#{1}
</select>

需要注意:

1、#{index}这个更像是用在有IOC的框架中使用,但是目前我并没有使用IOC。

2、如果在传递参数是不能使用List<Object>这种集合来存储参数。

3、目前我使用Map<String,Object>这种方式,虽然实现了Mapper的实现类Server,但不代表他是正宗的用法。

4、目前我这种通过Map参数实现传递Index参数的方案,Map元素中的值不能是Enum类型,即使在配置文件参数中指定类型也不正确。

Mapper.java

  public List<TaskAutoExecutePlan> getByTaskStatusAndAutoExecutePlanType(TaskStatus taskStatus, AutoExecutePlanType autoExecutePlanType);

Server.java

    @Override
public List<TaskAutoExecutePlan> getByTaskStatusAndAutoExecutePlanType(TaskStatus taskStatus, AutoExecutePlanType autoExecutePlanType) {
SqlSession sqlSession = this.factory.openSession(); Map<String,Object> parameters=new java.util.HashMap<>();
parameters.put("0",taskStatus.getValue());
parameters.put("1",autoExecutePlanType.getValue()); List<TaskAutoExecutePlan> result = sqlSession.selectList("com.xxx.mapper.TaskAutoExecutePlanMapper.getByTaskStatusAndAutoExecutePlanType",parameters);
sqlSession.commit();
sqlSession.close(); return result;
}
  • 3、Map封装多参数:

配置文件:

  <select id="getByTaskStatusAndAutoExecutePlanType" resultType="TaskAutoExecutePlan" resultMap="TaskAutoExecutePlanResult" parameterType="java.util.Map">
select * from TaskAutoExecutePlan where taskStatus=#{taskStatus,jdbcType=INTEGER} and autoExecutePlanType=#{autoExecutePlanType,jdbcType=INTEGER}
</select>

需要注意:这里不能直接把Enum存储到Map的元素中,第一:方面enum不是object对象,第二:默认TaskStatus.Doing会被转化为“Doing”字符串,参数不是整数意义发生了变换。

Mapper.java

    public List<TaskAutoExecutePlan> getByTaskStatusAndAutoExecutePlanType(Map<String,Object> parameters);

Server.java

    @Override
public List<TaskAutoExecutePlan> getByTaskStatusAndAutoExecutePlanType(Map<String,Object> parameters) {
SqlSession sqlSession = this.factory.openSession();
List<TaskAutoExecutePlan> result = sqlSession.selectList("com.xxx.mapper.TaskAutoExecutePlanMapper.getByTaskStatusAndAutoExecutePlanType",parameters);
sqlSession.commit();
sqlSession.close(); return result;
}

调用代码:

        Map<String,java.lang.Object> parameters=new java.util.HashMap<>();
parameters.put("taskStatus",TaskStatus.Doing.getValue());
parameters.put("autoExecutePlanType",AutoExecutePlanType.MrRasterization.getValue()); List<TaskAutoExecutePlan> items1 = taskAutoExecutePlanServer.getByTaskStatusAndAutoExecutePlanType(parameters);
for (TaskAutoExecutePlan item : items1)
System.out.println(item.getId() + "," + item.getAutoExecutePlanType() + "," + item.getTaskStatus() + "," + item.getCreateDate() + "," + item.getModifyDate());
  • 4、List封装in

配置文件:

    <select id="getByTaskStatusAndAutoExecutePlanType" resultType="TaskAutoExecutePlan" resultMap="TaskAutoExecutePlanResult">
select * from TaskAutoExecutePlan where id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">#{item,jdbcType=VARCHAR}</foreach>
</select>

Mapper.java

    public List<TaskAutoExecutePlan> getByTaskStatusAndAutoExecutePlanType(List<String> list);

Server.java

    @Override
public List<TaskAutoExecutePlan> getByTaskStatusAndAutoExecutePlanType(List<String> list) {
SqlSession sqlSession = this.factory.openSession();
List<TaskAutoExecutePlan> result = sqlSession.selectList("com.xxx.mapper.TaskAutoExecutePlanMapper.getByTaskStatusAndAutoExecutePlanType",list);
sqlSession.commit();
sqlSession.close(); return result;
}

调用:

 List<String> list=new java.util.ArrayList<>();
list.add("6a5987a6f78c11e69fb300fffdc16f2e");
list.add("0729bf7ef78d11e69fb300fffdc16f2e"); List<TaskAutoExecutePlan> items1 = taskAutoExecutePlanServer.getByTaskStatusAndAutoExecutePlanType(list);
for (TaskAutoExecutePlan item : items1)
System.out.println(item.getId() + "," + item.getAutoExecutePlanType() + "," + item.getTaskStatus() + "," + item.getCreateDate() + "," + item.getModifyDate());

其他方式还有混合调用、注解等方式,这些需要学习了Spring+MyBatis后在使用。

更多用法请参考:http://www.cnblogs.com/mingyue1818/p/3714162.html

MyBatis(二):Select语句传递参数的集中方案的更多相关文章

  1. {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析

    MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...

  2. Mybatis查询select 传单个参数不识别,找不到

    今天, Mybatis查询select 传单个参数不识别,找不到 解决办法: 加上jdbc=varchar #{XXX,jdbc=VARCHAR}

  3. mybatis where in语句中参数过多

    ps : mybatis在in中参数过多 出现问题 com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数.该服务器支持最多 210 ...

  4. Shell学习心得(二):传递参数、运算符

    1.传递参数 可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 向脚本传递三个参数, ...

  5. mybatis 中sql语句传递多个参数

    Available parameters are [2, 1, 0, param1, param2, param3] <select id="loginByTeacher"  ...

  6. 关于Mybatis的@Param注解 及 mybatis Mapper中各种传递参数的方法

    原文:https://blog.csdn.net/mrqiang9001/article/details/79520436 关于Mybatis的@Param注解   Mybatis 作为一个轻量级的数 ...

  7. 关于实现mybatis order by 排序传递参数实现 问题记录

    一    问题场景:本人项目纯纯的后端系统  并且项目前端采用纯纯的原生js 实现 1)表格  通过查询列表数据放入到域中  前段采用 for循环的方式实现遍历生成列表 2)分页实现本人是公司内部自定 ...

  8. mybatis框架中 #和$传递参数的区别 和注意

    #{}: 1.  是预编译 2.  编译成占位符 3.  可以防止sql注入 4.  自动判断数据类型 5.  一个参数时,可以使用任意参数名称进行接收 ${}: 1.  非预编译 2.  sql的直 ...

  9. Mybatis(二):Mybatis的映射文件sqlmapper详解

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

随机推荐

  1. Idea中开启assert断言

    先打开相应的配置面板,有以下两种方式.   然后在VM栏里输入 -enableassertions 或者 -ea 就好了 然后编写程序试试 我的目录结构如下:(因为Main class那里要写类的全限 ...

  2. 笔记:Struts2 文件上传和下载

    为了上传文件必须将表单的method设置为POST,将 enctype 设置为 muiltipart/form-data,只有设置为这种情况下,浏览器才会把用户选择文件的二进制数据发送给服务器. 上传 ...

  3. Spring Boot Druid数据源配置

    package com.hgvip.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.su ...

  4. ELK学习笔记(四)SpringBoot+Logback+Redis+ELK实例

    废话不多说,直接上干货,首先看下整体应用的大致结构.(整个过程我用到了两台虚拟机  应用和Shipper 部署在192.168.25.128 上 Redis和ELK 部署在192.168.25.129 ...

  5. 漫谈Java IO之基础篇

    Java的网络编程如果不是专门搞服务器性能开发或者消息分发,几乎可能涉及不到.但是它却是面试找工作必问的一个知识点,涵盖的知识体系也非常广泛,从Java底层IO原理到操作系统内核组成,再到网络TCP. ...

  6. 如何用Word编辑参考文献------这是引用一位大师的

    如何用Word编辑参考文献修改文献是一件非常痛苦的事情,虽然现在也有很多软件可以编排参考文献,其实word本身就可以. 采用合适的编辑方法会方便地做到整齐,规范,自动排序和交叉引用.1.以尾注的方式插 ...

  7. 浅谈element-ui中的BEM范式实践

    日常的工作中,我们无时无刻不在和样式打交道.没有样式的页面就如同一部电影,被人随意地在不同地方做了截取. BEM规范应该是对于我们现在前端组件开发中我觉得是最合适的一套范式了.所以,我在自己的日常工作 ...

  8. 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)

    前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...

  9. Alpha冲刺No.9

    一.站立式会议 继续解决真实手机中的问题,如果不能解决,请教助教学姐 数据库备忘录的获取和上传 细化界面设计 二.项目实际进展 用一种奇怪的方式解决了真实手机中的问题,在总结里细说. 完成数据库备忘录 ...

  10. 201621123040《Java程序设计》第12周学习总结

    1.本周学习总结 2.面向系统综合设计-图书馆管理系统或购物车 2.1简述如何使用流与文件改造你的系统.文件中数据的格式如何? 将书目信息写入文件,查阅图书馆书目信息时,实现文件的读取 2.2简述系统 ...