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

 

posted @ 2016-02-05 14:04  柚子苹果果  阅读(598)  评论(0编辑  收藏  举报