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