Mybatix实现in查询(五)

在这一节,我们要向大家介绍一下在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:1 商品:[001-0001] TCL D32E161 32英寸 内置wifi 在线影视 窄边LED网络液晶电视 ,售价:1099.9元/台
ID:2 商品:[001-0002] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:2799.0元/台
ID:3 商品:[001-0003] 康佳(KONKA) LED42E330CE 42英寸 全高清液晶电视 ,售价:1699.0元/台
ID:1 商品:[001-0001] TCL D32E161 32英寸 内置wifi 在线影视 窄边LED网络液晶电视 ,售价:1099.9元/台
ID:2 商品:[001-0002] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:2799.0元/台
ID:3 商品:[001-0003] 康佳(KONKA) LED42E330CE 42英寸 全高清液晶电视 ,售价:1699.0元/台

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

4.目录结构

时间: 2024-07-31 14:32:51

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

查询五子句

高级查询 select [all|distinct]*或字段名 [as] 字段别名 from 表名 [as] 表别名 [where 子句][group by子句][having子句][order by子句][limit 子句] [all|distinct] select选项 all 所有记录包含重复, distinct 不包含重复 此处重复:指的是查询出来的数据,记录所有的字段都相同才是重复. 字段别名 表别名 主要用于在多表进行查询时,多个表中可能有同名的字段,通过表别名进行指定. [wher

五千万数据索引查询

同事在查询五千万数据的时候,通过建立unique索引将查询速度得到提高 可以看到速度还是比较快的,在0.03秒左右徘徊,是可以接受的

MySQL五-2:多表查询

阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employeecompany.department #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex e

SQL 基础--&gt; 子查询

--========================= --SQL 基础--> 子查询 --========================= 一.子查询 子查询就是位于SELECT.UPDATE.或DELETE语句中内部的查询 二.子查询的分类 单行子查询 返回零行或一行 多行子查询 返回一行或多行 多列子查询 返回多列 相关子查询 引用外部SQL语句中的一列或多列 嵌套子查询 位于其它子查询中的查询 三.子查询语法 SQL> SELECT select_list FROM table WH

利用脚本实现mysql主库到备库数据同步(每五分钟同步一次增量)

目标: 将主库数据(IP1)每五分钟一次同步到备库(IP2) 服务器备库上,只同步增加量 思路: 利用crontab 每五分钟一次定时执行脚本进行数据同步 在脚本中编译实现查询五分钟内的数据增加量,并将增加量导入到备库 实现过程及代码(以record 表为例): bash脚本中内容 vi transaction.sh----建立transaction脚本实现同步 #!/bin/bash source.bash_profile (由于定时执行的功能使用crontab实现,需要在bash中添加使环境

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

最近在公司做项目,涉及到开发统计报表相关的任务,由于数据量相对较多,之前写的查询语句查询五十万条数据大概需要十秒左右的样子,后来经过老大的指点利用sum,case...when...重写SQL性能一下子提高到一秒钟就解决了.这里为了简洁明了的阐述问题和解决的方法,我简化一下需求模型. 现在数据库有一张订单表(经过简化的中间表),表结构如下: CREATE TABLE `statistic_order` ( `oid` bigint(20) NOT NULL, `o_source` varchar

06. SQL 基础--&gt; 子查询

一.子查询 子查询就是位于SELECT.UPDATE.或DELETE语句中内部的查询 二.子查询的分类 单行子查询 返回零行或一行 多行子查询 返回一行或多行 多列子查询 返回多列 相关子查询 引用外部SQL语句中的一列或多列 嵌套子查询 位于其它子查询中的查询 三.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); 子查询(内部查询)在执行主查询之前执行一次,然后主查询

mysql四-2:多表查询

阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null defau

MySQL之多表查询

阅读目录 一 多表联合查询 二 多表连接查询 三 复杂条件多表查询 四 子语句查询 五 其他方式查询 六 SQL逻辑查询语句执行顺序(重点) 七 外键约束 八 其他约束类型 九 表与表之间的关系 一.多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dname VARCHAR(50) not null COMMENT '部门名称' )ENGINE=INNODB D