准备工作

1)创建测试表
jobitem

CREATE TABLE "jobitem" (
"id" bigint(20) NOT NULL AUTO_INCREMENT COMMENT '唯一键 pk',
"appId" varchar(32) NOT NULL COMMENT 'yarn任务id(applicationId)',
"submitFilePath" varchar(256) NOT NULL COMMENT '提交脚本路径',
"state" varchar(16) DEFAULT NULL COMMENT '任务状态',
"monitorType" varchar(512) DEFAULT NULL COMMENT '监控列表',
"createUserId" varchar(32) NOT NULL COMMENT '创建者关联Id',
"createUserName" varchar(32) NOT NULL COMMENT '创建者用户名',
"createTime" datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY ("id"),
UNIQUE KEY "key" ("appId")
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='yarn任务持久化存储对象';

备注:这里mysql版本是5.7

2)使用mybatis-generator-plugin生成实体类:

Jobitem.java

package com.boco.jobmonitor.model;

import java.util.Date;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id; public class Jobitem {
/**
* 唯一键 pk<br>
* 列名:id 类型:INTEGER(10) 允许空:false 缺省值:null
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; /**
* yarn任务id(applicationId)<br>
* 列名:appId 类型:VARCHAR(32) 允许空:false 缺省值:null
*/
private String appid; /**
* 提交脚本路径<br>
* 列名:submitFilePath 类型:VARCHAR(256) 允许空:false 缺省值:null
*/
private String submitfilepath; /**
* 任务状态<br>
* 列名:state 类型:VARCHAR(16) 允许空:true 缺省值:null
*/
private String state; /**
* 监控列表<br>
* 列名:monitorType 类型:VARCHAR(512) 允许空:true 缺省值:null
*/
private String monitortype; /**
* 创建者关联Id<br>
* 列名:createUserId 类型:VARCHAR(32) 允许空:false 缺省值:null
*/
private String createuserid; /**
* 创建者用户名<br>
* 列名:createUserName 类型:VARCHAR(32) 允许空:false 缺省值:null
*/
private String createusername; /**
* 创建时间<br>
* 列名:createTime 类型:TIMESTAMP(19) 允许空:false 缺省值:null
*/
private Date createtime; public Jobitem() {
} public Jobitem(String appid, String submitfilepath, String state, String monitortype, String createuserid,
String createusername, Date createtime) {
super();
this.appid = appid;
this.submitfilepath = submitfilepath;
this.state = state;
this.monitortype = monitortype;
this.createuserid = createuserid;
this.createusername = createusername;
this.createtime = createtime;
} public Jobitem(Long id, String appid, String submitfilepath, String state, String monitortype,
String createuserid, String createusername, Date createtime) {
super();
this.id = id;
this.appid = appid;
this.submitfilepath = submitfilepath;
this.state = state;
this.monitortype = monitortype;
this.createuserid = createuserid;
this.createusername = createusername;
this.createtime = createtime;
} /**
* 唯一键 pk
*
* @author boco
* @return id 唯一键 pk
*/
public Long getId() {
return id;
} /**
* 唯一键 pk
*
* @author boco
* @param id
* 唯一键 pk
*/
public void setId(Long id) {
this.id = id;
} /**
* yarn任务id(applicationId)
*
* @author boco
* @return appId yarn任务id(applicationId)
*/
public String getAppid() {
return appid;
} /**
* yarn任务id(applicationId)
*
* @author boco
* @param appid
* yarn任务id(applicationId)
*/
public void setAppid(String appid) {
this.appid = appid == null ? null : appid.trim();
} /**
* 提交脚本路径
*
* @author boco
* @return submitFilePath 提交脚本路径
*/
public String getSubmitfilepath() {
return submitfilepath;
} /**
* 提交脚本路径
*
* @author boco
* @param submitfilepath
* 提交脚本路径
*/
public void setSubmitfilepath(String submitfilepath) {
this.submitfilepath = submitfilepath == null ? null : submitfilepath.trim();
} /**
* 任务状态
*
* @author boco
* @return state 任务状态
*/
public String getState() {
return state;
} /**
* 任务状态
*
* @author boco
* @param state
* 任务状态
*/
public void setState(String state) {
this.state = state == null ? null : state.trim();
} /**
* 监控列表
*
* @author boco
* @return monitorType 监控列表
*/
public String getMonitortype() {
return monitortype;
} /**
* 监控列表
*
* @author boco
* @param monitortype
* 监控列表
*/
public void setMonitortype(String monitortype) {
this.monitortype = monitortype == null ? null : monitortype.trim();
} /**
* 创建者关联Id
*
* @author boco
* @return createUserId 创建者关联Id
*/
public String getCreateuserid() {
return createuserid;
} /**
* 创建者关联Id
*
* @author boco
* @param createuserid
* 创建者关联Id
*/
public void setCreateuserid(String createuserid) {
this.createuserid = createuserid == null ? null : createuserid.trim();
} /**
* 创建者用户名
*
* @author boco
* @return createUserName 创建者用户名
*/
public String getCreateusername() {
return createusername;
} /**
* 创建者用户名
*
* @author boco
* @param createusername
* 创建者用户名
*/
public void setCreateusername(String createusername) {
this.createusername = createusername == null ? null : createusername.trim();
} /**
* 创建时间
*
* @author boco
* @return createTime 创建时间
*/
public Date getCreatetime() {
return createtime;
} /**
* 创建时间
*
* @author boco
* @param createtime
* 创建时间
*/
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
}

使用List对sql in进行传参时

如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
JobitemMapper接口类:

 List<Jobitem> findByIdList(List<String> appIds);

对应JobitemMapper.xml文件配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.dx.jobmonitor.mapper.JobitemMapper" >
<resultMap id="BaseResultMap" type="com.dx.jobmonitor.model.Jobitem" >
<!--
WARNING - @mbggenerated
-->
<id column="id" property="id" jdbcType="BIGINT" />
<result column="appId" property="appid" jdbcType="VARCHAR" />
<result column="submitFilePath" property="submitfilepath" jdbcType="VARCHAR" />
<result column="state" property="state" jdbcType="VARCHAR" />
<result column="monitorType" property="monitortype" jdbcType="VARCHAR" />
<result column="createUserId" property="createuserid" jdbcType="VARCHAR" />
<result column="createUserName" property="createusername" jdbcType="VARCHAR" />
<result column="createTime" property="createtime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
<!--
WARNING - @mbggenerated
-->
id,appId,submitFilePath,state,monitorType,createUserId,createUserName,createTime
</sql>
<select id="findByIdList" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from _jobitem where appId in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
</mapper>

测试代码:

package com.dx.jobmonitor.web;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.dx.jobmonitor.App;
import com.dx.jobmonitor.mapper.JobitemMapper;
import com.dx.jobmonitor.model.Jobitem; @RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { App.class, obitemMapper.class }, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class JobitemTest { @Autowired
private JobitemMapper sJobitemMapper; @Test
public void testFindByIdList() {
List<String> appIds = new ArrayList<String>();
appIds.add("application_1548381669007_0057");
appIds.add("application_1548381669007_0056");
appIds.add("application_1548381669007_0055"); List<Jobitem> result = sJobitemMapper.findByIdList(appIds); Assert.assertEquals(3, result.size());
}
}

使用Array对sql in进行传参时

如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
JobitemMapper接口类:

    List<Jobitem> findByIdArray(String[] appIds);

对应JobitemMapper.xml文件配置:

  <select id="findByIdArray" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from _jobitem where appId in
<foreach item="item" index="index" collection="array" open="(" separator="," close=")">
#{item}
</foreach>
</select>

测试代码:

    @Test
public void testFindByIdArray() {
String[] appIds = new String[] { "application_1548381669007_0057", "application_1548381669007_0056",
"application_1548381669007_0055" }; List<Jobitem> result = sJobitemMapper.findByIdArray(appIds); Assert.assertEquals(3, result.size());
}

使用Map对sql in传递多参数时

当查询的参数有多个时,例如 findByIds(String name, Long[] ids)。这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样在collection属性可以指定名称
JobitemMapper接口类:

    List<Jobitem> findByIdMap(Map<String, Object> creatorAndappIds);

对应JobitemMapper.xml文件配置:

  <select id="findByIdMap" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from _jobitem
where createUserName=#{username,jdbcType=VARCHAR}
and appId in
<foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
#{item}
</foreach>
</select>

测试代码:

    @Test
public void testFindByIdMap() {
Map<String, Object> creatorAndappIds = new HashMap<String, Object>();
creatorAndappIds.put("username", "admin");
String[] appIds = new String[] { "application_1548381669007_0057", "application_1548381669007_0056",
"application_1548381669007_0055" };
creatorAndappIds.put("ids", appIds); List<Jobitem> result = sJobitemMapper.findByIdMap(creatorAndappIds); Assert.assertEquals(3, result.size());
} @Test
public void testFindByIdMap2() {
Map<String, Object> creatorAndappIds = new HashMap<String, Object>();
creatorAndappIds.put("username", "admin");
List<String> appIds = new ArrayList<String>();
appIds.add("application_1548381669007_0057");
appIds.add("application_1548381669007_0056");
appIds.add("application_1548381669007_0055");
creatorAndappIds.put("ids", appIds); List<Jobitem> result = sJobitemMapper.findByIdMap(creatorAndappIds); Assert.assertEquals(3, result.size());
}

使用string...对sql in进行传参时

JobitemMapper接口类:

    List<Jobitem> findByIdMutilParams(String... appIds);

对应JobitemMapper.xml文件配置:

  <select id="findByIdMutilParams" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from _jobitem
where appId in
<foreach item="item" index="index" collection="array" open="(" separator="," close=")">
#{item}
</foreach>
</select>

测试代码:

    @Test
public void testFindByIdMultiParams() {
List<Jobitem> result = sJobitemMapper.findByIdMutilParams("application_1548381669007_0057",
"application_1548381669007_0056", "application_1548381669007_0055"); Assert.assertEquals(3, result.size());
}

MyBatis(四):mybatis中使用in查询时的注意事项的更多相关文章

  1. 在form子句中使用子查询时的注意事项

    今天中午为了弄清这个问题,本人真的是头都搞大了!最后明白了一点,在from子句中使用子查询是,一定要将临时表的别名带上,否则会灰常痛苦!!!

  2. mybatis中使用in查询时的注意事项

    1. 当查询的参数只有一个时 findByIds(List<Long> ids)  1.a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list < ...

  3. oracle中使用sql查询时字段为空则赋值默认

    转至:http://www.th7.cn/db/Oracle/201501/86125.shtml oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 oracle 函数介绍之nvl ...

  4. mybatis sql in 查询(mybatis sql语句传入参数是list)mybatis中使用in查询时in怎么接收值

    1.in查询条件是list时 <select id="getMultiMomentsCommentsCounts" resultType="int"> ...

  5. mybatis中使用where in查询时的注意事项

    我使用的时候collection值为mapper的参数名如:int deleteRoleByUserIds(@Param("userIds") String[] userIds); ...

  6. mybatis xml 文件中like模糊查询

    1.直接传参法 直接传参法,就是将要查询的关键字keyword,在代码中拼接好要查询的格式,如%keyword%,然后直接作为参数传入mapper.xml的映射文件中. 2.CONCAT()函数 My ...

  7. MYSQL中的SELECT查询时进行运算

    SELECT在mysql中是查询表中的数据的作用,但也可以在查询的时候直接进行运算,然后返回查询后的结果 比如 )) FROM username2 其中的IFNULL函数是对adven数据进行判断,若 ...

  8. SQL中join连接查询时条件放在on后与where后的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...

  9. 关于在vs中添加生成命令时的注意事项

    涉及到目录最好用双引号括起来,防止在目录含有空格或文字时发生错误.例如 del "$(SolutionDir)\..\xxxxxx\xxxx\Build\*.*" /s /q xc ...

随机推荐

  1. web项目部署以及放到ROOT目录下

    最近度过了一个国庆长假,好几天都没有写博客了! 发布这篇案例也是希望能帮助到像我一样的菜鸟o(* ̄︶ ̄*)o,百度上面的资料都不怎么全.也没有人说明注意事项.总是这篇说一点.那个人也说补一点,最后自己 ...

  2. 最短路(Floyd)-hdu1317

    题目链接:https://vjudge.net/problem/HDU-1317 题目描述: 题意:玩家起始有100个能量点,刚开始在起始房间中,每个房间外有一条单向的路径通往其他房间(一个房间可能通 ...

  3. python 数据结构之二叉树

    二叉树关键在构建和遍历,python实现相对简单,我们在实现需要用到类,分别设置爱左右子树,根节点,然后从根进行遍历,进行判断,若为空进行树的构建,非空则返回到列表中即可,我在进行遍历时产生了一个错误 ...

  4. 图片预览组件PhotoView

    图片预览组件PhotoView PhotoView是一款图片预览组件,广泛应用于大图的查看.该组件支持图片手势缩放.旋转等功能.它可以很好的和ViewPager.Picasso等组件结合,实现各种复杂 ...

  5. 给有C或C++基础的Python入门 :Python Crash Course 4 操作列表 4.1--4.3

    操作列表,也就是遍历列表.本章我们要学的就是如何遍历列表. 4.1--4.2 遍历列表 遍历列表,用for循环. 不同于C++或者C语言的for循环,Python的for循环更容易让人理解. 看一个例 ...

  6. 英语口语练习系列-C30-生日-年历的周日和月份-如果白昼落进

    词汇-生日-birthday 生日庆祝 birthday celebration birth noun UK /bɜːθ/ US /bɝːθ/ the time when a baby or youn ...

  7. 解决linux环境mysql的sql语句严格区分大小写问题

    在Windows环境下,mysql数据库的sql语句是不区分字母大小写的,但是程序移植到linux环境中,就会造成某些大小写不一致的语句执行失败,解决方法如下: 首先打开/etc/mysql/my.c ...

  8. phpmyadmin#1045 无法登录 MySQL 服务器

    使用lnmp安装wordpress在登录phpmyadmin数据库的时候诡异的出现了   phpmyadmin#1045 无法登录 MySQL 服务器,解决方法如下: 1 修改root的密码—不可以行 ...

  9. 潭州课堂25班:Ph201805201 django 项目 第二十课 数据库分析设计图 (课堂笔记)

    https://www.dbdesigner.net/

  10. 04 树莓派截图软件scrot的安装和使用

    2017-08-22 13:52:52 sudo apt-get install scrot 捕捉活动窗口(按下回车后,3秒之内点击要捕捉的窗口): scrot -d 3 -u 捕捉选定的区域(按下回 ...