在这一节,我们要向大家介绍一下在Mybatis中想要实现in查询,Mapper文件应该怎么配置。

1)在com.mybatis.dao.PartDao中增加接口函数

public List<PartInfo> getPartInfoByIDList(List<Integer> idList);
public List<PartInfo> getPartInfoByIDArray(Integer[] idArray);

2) 在com.mybatis.dao.mapper.PartMapper中增加其实现方法

<select id="getPartInfoByIDList" parameterType="java.util.List" resultType="com.mybatis.entity.PartInfo">
SELECT * FROM tbInfoPart
WHERE ID IN
<foreach collection="list" index="i" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select> <select id="getPartInfoByIDArray" parameterType="java.lang.reflect.Array" resultType="com.mybatis.entity.PartInfo">
SELECT * FROM tbInfoPart
WHERE ID IN
<foreach collection="array" index="i" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合:

collecton:要循环的集合,可以是一个List、可以是一个数组

index:循环的索引

item:循环过程中每一个元素的别名

open:整个循环开始之前要增加的字符串

separator:循环之间夹杂的字符串

close:整个循环结束之后要增加的字符串

3)测试下效果

public static List<PartInfo> selectPartByIDList(List<int> idList){
InputStream iStream = TestMain.class.getClassLoader().getResourceAsStream("mybatis.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(iStream);
SqlSession session = sessionFactory.openSession();
String statement = "com.mybatis.dao.PartDao.getPartInfoIDList";
List<PartInfo> partInfos = session.selectList(statement, idList);
session.close();
return partInfos;
} public static List<PartInfo> selectPartByIDArray(Integer[] idArray){
InputStream iStream = TestMain.class.getClassLoader().getResourceAsStream("mybatis.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(iStream);
SqlSession session = sessionFactory.openSession();
String statement = "com.mybatis.dao.PartDao.getPartInfoIDArray";
List<PartInfo> partInfos = session.selectList(statement, idArray);
session.close();
return partInfos;
}
public static void main(String[] args) {
List<Integer> idList = new ArrayList<Integer>();
idList.add(1);
idList.add(2);
idList.add(3); Integer[] idArray = {1,2,3}; List<PartInfo> partInfos; partInfos = selectPartByIDList(idList);
for (PartInfo partInfo : partInfos) {
System.out.println("ID:"+partInfo.getId()+" 商品:["+
partInfo.getPartCode()+"] "+
partInfo.getPartName()+" ,售价:"+
partInfo.getSalePrice()+"元/"+
partInfo.getUnit()); partInfos = selectPartByIDArray(idArray );
for (PartInfo partInfo : partInfos) {
System.out.println("ID:"+partInfo.getId()+" 商品:["+
partInfo.getPartCode()+"] "+
partInfo.getPartName()+" ,售价:"+
partInfo.getSalePrice()+"元/"+
partInfo.getUnit());
}

执行后的打印结果为:

ID: 商品:[-] TCL D32E161 32英寸 内置wifi 在线影视 窄边LED网络液晶电视 ,售价:.9元/台
ID: 商品:[-] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:.0元/台
ID: 商品:[-] 康佳(KONKA) LED42E330CE 42英寸 全高清液晶电视 ,售价:.0元/台
ID: 商品:[-] TCL D32E161 32英寸 内置wifi 在线影视 窄边LED网络液晶电视 ,售价:.9元/台
ID: 商品:[-] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:.0元/台
ID: 商品:[-] 康佳(KONKA) LED42E330CE 42英寸 全高清液晶电视 ,售价:.0元/台

可以看到商品信息已经被我们查询到了。

4.目录结构

Mybatix实现in查询(五)的更多相关文章

  1. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  2. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  3. StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用

    ConnectionMultiplexer ConnectionMultiplexer 是StackExchange.Redis的核心对象,用这个类的实例来进行Redis的一系列操作,对于一个整个应用 ...

  4. Mysql-学习笔记(==》连接查询_高级查询五)

    CREATE TABLE t( tid INT UNSIGNED NOT NULL AUTO_INCREMENT, tname VARCHAR(30), PRIMARY KEY (tid))ENGIN ...

  5. IBatis.Net 表连接查询(五)

    IBatis.Net之多表查询: 一.定制实际对应类的方式 首先配置多表的测试数据库,IBatis.Net之Oracle表连接查询配置: 首先新建两张表如下: 为两张表建立外键: ALTER TABL ...

  6. SQL语句(五)子查询

    目录 一.子查询含义 二.子查询分类 按子查询的位置分 按结果集的行列数不同分 三.WHERE后面的子查询 1. 标量子查询 2. 列子查询(多行子查询) 3. 行子查询(结果为一行多列或多行多列) ...

  7. 五、MongoDB的索引

    一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 四.MongoDB的查询 五.MongoDB的索引 1.简介 它就像是一本书的目录,如果没 ...

  8. 05: MySQL高级查询

    MySQL其他篇 目录: 参考网站 1.1 GROUP BY分组使用 1.2 mysql中NOW(),CURDATE(),CURTIME()的使用 1.3 DATEDIFF() 函数 1.4 DATE ...

  9. MySQL巧用sum,case...when...优化统计查询

    最近在做项目,涉及到开发统计报表相关的任务,由于数据量相对较多,之前写的查询语句查询五十万条数据大概需要十秒左右的样子,后来经过老大的指点利用sum,case...when...重写SQL性能一下子提 ...

随机推荐

  1. Ubuntu 1804 进入紧急模式

    进入系统引导前,长按shift键:     选择第一条,按e进入编辑     添加完成后,只需按下 CTRL+x 或 F10 即可继续启动救援模式         接下来,输入以下命令将根 (/) 文 ...

  2. POJ 2155:Matrix 二维树状数组

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 21757   Accepted: 8141 Descripti ...

  3. GNS3 模拟Arp命令1

    R1 : conf t int f0/0 no shutdown ip add 192.168.1.1 255.255.255.0 end R2: conf t int f0/0 no shutdow ...

  4. C++ 根据日期判断星期几

    int CaculateWeekDay(int y,int m, int d) { ||m==) { m+=; y--; } *m+*(m+)/+y+y/-y/+y/)%; ; }

  5. 如何禁用AD OU 下面的邮箱用户的Exchange ActiveSync 和 适用于设备的OWA

    Get-Mailbox -OrganizationalUnit QQ禁用名单 | Set-CASMailbox  -ActiveSyncEnabled $false -OWAforDevicesEna ...

  6. 【pwnable.kr】 unlink

    pwnable.kr 第一阶段的最后一题! 这道题目就是堆溢出的经典利用题目,不过是把堆块的分配与释放操作用C++重新写了一遍,可参考<C和C++安全编码一书>//不是广告 #includ ...

  7. 19 03 02 HTTP和https

    HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer Protocol ov ...

  8. 云时代架构阅读笔记二——Java性能优化(二)

    承接上文Java性能优化(一)https://www.cnblogs.com/guo-xu/p/11019267.html 4)尽量确定StringBuffer的容量 在说和这个标题相关之前,先说一下 ...

  9. spring源码 AutowireCapableBeanFactory接口

    对于想要拥有自动装配能力,并且想把这种能力暴露给外部引用的BeanFactory类需要实现此接口.正常情况下,不要使用此接口应该更倾向于使用BeanFactory或者ListableBeanFacto ...

  10. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结(转载)

    转载自 https://blog.csdn.net/baidu_24024601/article/details/51957270 之前就了解过这方面的知识,但是没有系统地总结.今天在这总结一下,也让 ...