MyBatis 中实现SQL语句中in的操作

概括:应用myBatis实现SQL查询中IN的操作

1、数据库结构及其数据

2、mapper.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.mybatis03.mapper.PersonMapper">
<!-- foreach 操作 -->
<select id="queryPersonWithInIDs" parameterType="com.mybatis03.bean.PersonIDs" resultType="com.mybatis03.bean.Person">
select * from t_person_01
<!-- where 只会处理第一个条件 -->
<!--
1、PersonIDs 为集合类
2、personNos 为PersonIDs集合类中的属性
3、personNo 为遍历personNos 的临时变量(相当于 for循环中的i)
4、separator 作用为 select * from t_person_01 where in(1001,1002,1003) 中的分割符号逗号,既:“,”
-->
<where>
<if test="personNos !=null and personNos.size >0 ">
<foreach collection="personNos" open=" and id in(" close=")" item="personNo" separator=",">
#{personNo}
</foreach>
</if>
</where>
</select> </mapper>

3、接口类

/**
* @author :jack.zhao
* @Describe: 操作mybatis接口
* @date :2021-10-16 22:55
*/
public interface PersonMapper {
// 人员编号集合(根据人员id集合查询)select * from t_person_01 where id in(1001,1002,1003);
List<Person> queryPersonWithInIDs(PersonIDs personIDs);
}

4、作为查询条件集合类

package com.mybatis03.bean;

import java.util.List;

/**
* @author :jack.zhao
* @Describe: 查询条件集合类
* @date :2021-10-16 22:55
*/
public class PersonIDs { public List<Integer> getPersonNos() {
return personNos;
} public void setPersonNos(List<Integer> personNos) {
this.personNos = personNos;
} // 人员编号集合(根据人员id集合查询)select * from t_person_01 where id in(1001,1002,1003);
private List<Integer> personNos;
}

5、测试类中测试方法

/**
* @author :jack.zhao
* @Describe: 测试类
* @date :2021-10-16 22:55
*/
public class test03 {
// // 人员编号集合(根据人员id集合查询)select * from t_person_01 where id in(1001,1002,1003);
@Test
public void queryPersonWithInIDs() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis-03.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sessionFactory.openSession();
PersonIDs personIDs = new PersonIDs(); List<Integer> lists = new ArrayList<>();
lists.add(1001);
lists.add(1002);
lists.add(1003);
personIDs.setPersonNos(lists); // 动态代理
PersonMapper personMapper = session.getMapper(PersonMapper.class);
List<Person> personList = personMapper.queryPersonWithInIDs(personIDs);
System.out.println("动态SQL查询结果为:"+personList);
session.close();
}
}

查询结果:

"C:\Program Files\Java\jdk1.8.0_25\bin\java" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Users\newsoft\AppData\Roaming\JetBrains\IntelliJ IDEA 2017.3.5\lib\idea_rt.jar=1182:C:\Users\newsoft\AppData\Roaming\JetBrains\IntelliJ IDEA 2017.3.5\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\newsoft\AppData\Roaming\JetBrains\IntelliJ IDEA 2017.3.5\lib\idea_rt.jar;C:\Users\newsoft\AppData\Roaming\JetBrains\IntelliJ IDEA 2017.3.5\plugins\junit\lib\junit-rt.jar;C:\Users\newsoft\AppData\Roaming\JetBrains\IntelliJ IDEA 2017.3.5\plugins\junit\lib\junit5-rt.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\junit\platform\junit-platform-launcher\1.5.2\junit-platform-launcher-1.5.2.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\junit\platform\junit-platform-engine\1.5.2\junit-platform-engine-1.5.2.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\junit\platform\junit-platform-commons\1.5.2\junit-platform-commons-1.5.2.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\junit\jupiter\junit-jupiter-engine\5.5.2\junit-jupiter-engine-5.5.2.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\junit\jupiter\junit-jupiter-api\5.5.2\junit-jupiter-api-5.5.2.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\junit\vintage\junit-vintage-engine\5.5.2\junit-vintage-engine-5.5.2.jar;D:\download\lib\mavenTollTransfer\mic-repository\junit\junit\4.12\junit-4.12.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_25\jre\lib\rt.jar;D:\ideaworkspace\ProjectStudy\mybatis-02\target\classes;D:\download\lib\mavenTollTransfer\mic-repository\org\hamcrest\hamcrest-core\2.1\hamcrest-core-2.1.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\hamcrest\hamcrest\2.1\hamcrest-2.1.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;D:\download\lib\mavenTollTransfer\mic-repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar;D:\download\lib\mavenTollTransfer\mic-repository\cglib\cglib\3.3.0\cglib-3.3.0.jar;D:\download\lib\mavenTollTransfer\mic-repository\org\ow2\asm\asm\7.1\asm-7.1.jar;D:\download\lib\mavenTollTransfer\mic-repository\net\logstash\logback\logstash-logback-encoder\5.3\logstash-logback-encoder-5.3.jar;D:\download\lib\mavenTollTransfer\mic-repository\com\fasterxml\jackson\core\jackson-databind\2.10.3\jackson-databind-2.10.3.jar;D:\download\lib\mavenTollTransfer\mic-repository\com\fasterxml\jackson\core\jackson-annotations\2.10.3\jackson-annotations-2.10.3.jar;D:\download\lib\mavenTollTransfer\mic-repository\com\fasterxml\jackson\core\jackson-core\2.10.3\jackson-core-2.10.3.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit5 com.mybatis03.test.test03,queryPersonWithInIDs
动态SQL查询结果为:[Person{id=1001, name='zhangsan', age=27, sex=true, address=null}, Person{id=1002, name='chenqi', age=29, sex=true, address=null}, Person{id=1003, name='maliu', age=16, sex=true, address=null}] Process finished with exit code 0

MyBatis 中实现SQL语句中in的操作 (11)的更多相关文章

  1. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  2. delphi中的sql语句中空格问题

    sql语句中的冒号 ‘’,在delphi中需要用四个冒号表示 ‘’‘’,delphi中的两个冒号只代表一个冒号

  3. java中的sql语句中如果有like怎么写

    我先是在SQL server中写了如下语句: 这样是顺利执行的,可是我把这句话复制到Java代码中打出来却报错了, 刚开始我还以为是前端没有传回来值,待我一句一句打印发现,它提示我rs没有next.到 ...

  4. PDO中捕获SQL语句中的错误

    使用默认模式-----PDO::ERRMODE_SILENT 在默认模式中设置PDOStatement对象的errorCode属性,但不进行其它不论什么操作. 比如: 通过prepare()和exec ...

  5. delphi中写SQL语句中变量的注意事项

    1.procedure TForm1.btn1Click(Sender: TObject); var   s: String; begin   S := 'select * from TMarketI ...

  6. MyBatis中动态SQL语句完成多条件查询

    一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...

  7. MyBatis 动态 SQL 语句中出现 '<' 的问题

    问题描述 映射接口方法如下: /** * 根据姓名和年龄查询用户信息 * @param name 姓名 * @param user 获取年龄 * @return */ public List<U ...

  8. 160311、mybatis sql语句中转义字符

    问题: 在mapper  ***.xml中的sql语句中,不能直接用大于号.小于号要用转义字符 解决方法:   1.转义字符串 小于号    <    < 大于号    >    & ...

  9. mybatis sql语句中转义字符

    问题: 在mapper  ***.xml中的sql语句中,不能直接用大于号.小于号要用转义字符 解决方法:   1.转义字符串 小于号    <    < 大于号    >    & ...

随机推荐

  1. SpringMVC笔记(3)

    一.SpringMVC 拦截器 1.1 快速入门 步骤 创建拦截器类实现HandlerInterceptor接口 public class MyInterceptor01 implements Han ...

  2. MySQL数据库迁移之data目录

    其实迁移数据库,一般用sql文件就行,把A服务器数据库的表结构和数据等等导出,然后导入到B服务器数据库, 但是这次数据文件过大,大约有40个G,使用命令行导入,效果不是很好,经常在执行过程中报错.卡死 ...

  3. ucosii操作系统内核源码学习第一篇

    根据书本理论介绍以及实际看内核源代码得出: 1. 操作系统默认定义了64个TCB块(为全局变量,编译时候以及分配了,创建一个任务就使用一个,删除一个任务就归还一个)(为什么最大只支持64个任务呢,我们 ...

  4. Python3实现打格点算法的GPU加速

    技术背景 在数学和物理学领域,总是充满了各种连续的函数模型.而当我们用现代计算机的技术去处理这些问题的时候,事实上是无法直接处理连续模型的,绝大多数的情况下都要转化成一个离散的模型再进行数值的计算.比 ...

  5. 你的 JVM 基础“大厦”稳健吗?

    [从 1 开始学 JVM 系列] JVM 对于每位 Java 语言编程者来说无疑是"重中之重",尽管我们每天都在与它打交道,却很少来审视它.了解它,慢慢地,它成为了我们" ...

  6. Http协议 压缩

    先说结论:Request和Response可以设置gzip压缩从而节省流量/带宽,这是一个不常见的问题.具体可见连接:HTTP 协议之压缩 最近测试代理服务器时,意外的发现使用urlopen请求百度首 ...

  7. 对easyui-validatebox的验证类型的扩展--补充

    一.说明 这篇文章是<对easyui-validatebox的验证类型的扩展>的补充.在工程的持续开发中,我们又对此进行了更多的补充. 二.补充代码 增加了更多的验证类型. /* * 比较 ...

  8. Docker Compose 实践及梳理

    Docker Compose 可以实现 Docker 容器集群的编排,可以通过 docker-compose.yml 文件,定义我们的服务及其需要的依赖,轻松地运行在测试.生产等环境 文档 Produ ...

  9. 链表 Linked List

    目录 链表介绍 单链表 单链表的应用实例 添加-直接添加到末尾 添加-顺序添加 更新 删除 单链表的面试题 双链表 链表介绍 链表时有序的列表,但是它在内存中是存储如下 小结 链表是以节点的方式来存储 ...

  10. Baidu初试题分享(Java高级工程师)

    [特别声明:文章仅用来借鉴学习,不用于其他商业化活动] 1.JDK和JRE区别? JDK是整个JAVA的核心,包括了Java运行环境JRE,一堆Java工具和Java基础的类库.通过JDK开发人员将源 ...