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.目录结构

笔者只是初学者,开此博客的初衷是为了给自己的学习过程留一个痕迹。所以您可能发现笔者措辞不严谨、逻辑不合理,甚至代码有错误、结论很偏颇等等。笔者感激各位的讨论和指正,并在此不胜感激!拜谢!欢迎加QQ群讨论:852410026
原文地址:https://www.cnblogs.com/LOVE0612/p/5183094.html